JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)

网传一张图

JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)_第1张图片

PO(Persistant Object)持久对象

PO比较好理解

简单说PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象

通常PO里面除了get,set之外没有别的方法

对于PO来说,数量是相对固定的,一定不会超过数据库表的数量

等同于Entity,这俩概念是一致的

 

BO(Business Object)业务对象

BO就是PO的组合

简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象

复杂点儿的例子PO1是交易记录,PO2是登录记录,PO3是商品浏览记录,PO4是添加购物车记录,PO5是搜索记录,BO是个人网站行为对象

BO是一个业务对象,一类业务就会对应一个BO,数量上没有限制,而且BO会有很多业务操作,也就是说除了get,set方法以外,BO会有很多针对自身数据进行计算的方法

为什么BO也画成横跨两层呢?原因是现在很多持久层框架自身就提供了数据组合的功能,因此BO有可能是在业务层由业务来拼装PO而成,也有可能是在数据库访问层由框架直接生成

很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用

 

BO和DTO的区别

这两个的区别主要是就是字段的删减

BO对内,为了进行业务计算需要辅助数据,或者是一个业务有多个对外的接口,BO可能会含有很多接口对外所不需要的数据,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供

在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成

 

DO是什么

一个是阿里巴巴的开发手册中的定义:DO( Data Object)这个等同于上面的PO

另一个是在DDD(Domain-Driven Design)领域驱动设计中,DO(Domain Object)这个等同于上面的BO

 

我们的规范

JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)_第2张图片

开发规范

0、上面的 DO 只是一个概念,并不是说把类名后面加上“DO”

1、返回前端:ResultVO

2、返回微服务:DTO

3、所有的实体统一放在模块 Common 下,Client 实体(VO/DTO)需要独立一份出来;Common 模块下需要创建 domain,然后 domain 下创建各种 POJO 包,然后每个 POJO 包 下先创建业务子包,然后开始创建 POJO 类

Ps:如果遇到公共类(如:ResultVO)放到 domain.vo 下。

4、所有泛型该加的需要加上

5、魔法值:只有一个类用到提出到当前类上面;多个类用到提出到 Const 常量类

6、注释:类、接口、方法、代码、字段

7、常用的 DEBUG 代码提示被删可以写到单元测试里

8、最简单的 CRUD 也需要按照这领域模型规范来

9、Client 类只有接口和DTO,其余工具、常量等类抽象到一个公共项目,并且每次提交新变化需要改版本

10、公共异常封装:第一项公共异常抛出,剩余具体业务分析后抛出

11、响应码封装(6位,前3位类型码,后3位业务码)

12、方法名尽可能不要缩写,By多的时候可以用实体类

13、数据库表名:t_项目/模块名_po名(尽量不缩写)

14、必要日志打印:INFO:无论如何都要打印,DEBUG:排查问题打印。(微服务出入必须打印)

15、Controller 不允许有私有方法,统一挪到 Service 处理

16、代码必须符合 Alibaba & Sonarqube 规范

你可能感兴趣的:(#,JavaWeb,JavaWeb,Alibaba,开发规范,Sonarqube,领域模型,DO,VO,PO,DTO,BO,POJO,AO)