DO、DTO、BO、AO、VO、POJO
介绍
阿里巴巴 Java 开发手册中的定义如下:
「分层领域模型」规约:
- DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
- DTO( Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
- BO( Business Object):业务对象。 由Service层输出的封装业务逻辑的对象。
- AO( Application Object):应用对象。 在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
- VO( View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
- POJO( Plain Ordinary Java Object):在本手册中, POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。
- Query:数据查询对象,各层接收上层的查询请求。 注意超过2个参数的查询封装,禁止使用Map类来传输。
领域模型命名规约:
- 数据对象:xxxDO,xxx即为数据表名。
- 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
- 展示对象:xxxVO,xxx一般为网页名称。
- POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
简单总结一下比较多提到的「分层领域模型」:
- DO(Data Object):数据对象,其实就是一个实体类 Entity 的对象,与数据库表一一对应。
- DO(Domain Object):领域对象,DO 是抽象出来的业务实体,对于一般的关系数据库,DO 对应一个业务表。
- 它与 DTO 不同,DTO 是处理数据在页面与业务层之间的流动,而 DO 像是在业务层里给用户分角色,将用户角色的权限和用户的信息封装。
- DTO(Data Transfer Object):是表现层(前端页面)与业务层之间数据传输的介质。比如前端提交了一个表单,我们把表单数据塞到 DTO 对象,DTO 对象又作为控制器方法的入参,进一步地将数据传输到业务层,然后业务层内部又会借由 DTO 构建一个实体类 Entity,借由 Entity 实现与数据库的交互。简单来说,DTO 实现了表现层与业务层数据的流动,Entity 实现了业务层与数据库之间数据的流动。
- BO( Business Object):业务对象。就是 Service 层的实例化呀。这个对象里会有各种业务逻辑方法,也可以调用其他业务对象。比如我要实现一个访客预约的功能,那么我会在 Controller 层开一个访客预约的方法,为了保证 Controller 层逻辑的简单性,复杂的业务逻辑会通过调用业务逻辑层的方法来实现。这里的业务逻辑层的实例化,就是一个 BO。
- VO( View Object):视图对象,绝大部分场景与 DTO 等价。
- POJO(Plain Ordinary Java Object):指含有 set、get、toString 方法的一般对象,不允许有业务方法,也不能携带有connection之类的方法。但有时也将 DO、DTO、VO、BO 归于 POJO 的范畴。
DAO (Data Access Object):用于实现业务层与数据库的交互。
参考
标签:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具