java后端开发的DO、DTO、BO、AO、VO、POJO定义

1.常用文件夹命名规则

pojo:

(1)vo (与前端交互的所有对象,包括接参和返回)

(2)query (查询的筛选条件,前端传参和后端内部传参通用)

(3) entity (数据库表基础对象

(4)dto(后端内部传输用,例如多张表字段合并到一个对象)

2.分层领域模型规约

DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。

DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。

BO(Business Object):业务对象,可以由 Service 层输出的封装业务逻辑的对象。

Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。

VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。

3.DTO

DTO(Data Transfer Object)数据传输对象

这个传输通常指的前后端之间的传输

DTO是一个比较特殊的对象,他有两种存在形式:

在后端,他的存在形式是java对象,也就是在controller里面定义的那个东东,通常在后端不需要关心怎么从json转成java对象的,这个都是由一些成熟的框架帮你完成啦,比如spring框架

在前端,他的存在形式通常是js里面的对象(也可以简单理解成json),也就是通过ajax请求的那个数据体。

DTO本身的一个隐含的意义是要能够完整的表达一个业务模块的输出

4.VO(Value Object)值对象

VO就是展示用的数据,不管展示方式是网页,还是客户端,还是APP,只要是这个东西是让人看到的,这就叫VO

VO主要的存在形式就是js里面的对象(也可以简单理解成json)

VO和DTO的区别

主要有两个区别

一个是字段不一样,VO根据需要会删减一些字段

另一个是值不一样,VO会根据需要对DTO中的值进行展示业务的解释

5.PO(Persistant Object)持久对象

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

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

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

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

6.BO(Business Object)业务对象

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

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

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

BO和DTO的区别

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

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

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

DO( Data Object)这个等同于上面的PO

另一个是在DDD(Domain-Driven Design)领域驱动设计

DO(Domain Object)这个等同于上面的BO

在设计时候:

1.PO这个没法省,不管叫PO还是Entity,怎么着都得有

2,一些工具类的系统和一些业务不是很复杂的系统DTO是可以和BO合并成一个,当业务扩展的时候注意拆分就行

3,VO是可以第一个优化掉的,展示业务不复杂的可以压根儿不要,直接用DTO

DTO是可以存在于各层服务中(接口、服务、数据库等等)服务间的交互使用DTO来解耦

VO (view object/value object)表示层对象前端展示的数据,在接口数据返回给前端的时候需要转成VO使用场景,在接口层服务中,将DTO转成VO,返回给前台B0(bussines object)业务层对象

在服务层服务中,由DTO转成BO然后进行业务处理后,转成DTO返回到接口层,PO(persistent object)持久对象

DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。

DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。

BO(Business Object):业务对象,由 Service 层输出的封装业务逻辑的对象。

AO(ApplicationObject):应用对象,在Web层与Service层之间抽象的复用对象模型, 极为贴近展示层,复用度不高。

VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。

Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。

最难理解的是BO,大致这么理解:

BO这个对象可以包括一个或多个其它的对象。

比如一个简历,有教育经历、工作经历、社会关系等等。

我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。

建立一个对应简历的BO对象处理简历,每个BO包含这些PO。这样处理业务逻辑时,我们就可以针对BO去处理。

Controller层

此层常见的转换为:DTO转VO,将Services层传过来的DTO转换成VO表示数据返回给前端

Service层、Manager层

此层常见的转换为:DO转BO、BO转DTO

DAO层

此层常见的转换为:DTO转换为DO,与数据库进行交互

Entity表结构实体,对应DO

BO业务实体

VO视图实体,DTO可共用

相关推荐
吾日三省吾码6 分钟前
JVM 性能调优
java
stm 学习ing11 分钟前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc1 小时前
《Python基础》之字符串格式化输出
开发语言·python
弗拉唐1 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi772 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
mqiqe2 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin2 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
少说多做3432 小时前
Android 不同情况下使用 runOnUiThread
android·java