关于POJO/DTO/DO/EO/VO/BO/PO/AO
本文讨论 POJO/DTO/DO/EO/VO/BO/PO/AO 的定义,另外讨论了这些xO在controller、service、dao/mapper层里的使用规范。另外还稍微讨论了controller中是否要 “轻逻辑”,mapper接口的规范等等问题。
前言
在我们的java项目中存在各种xO的概念,如POJO/DTO/DO/EO/VO,还有些后端开发可能不太常见的BO/PO/AO。这里结合阿里Java手册以及其他博客的知识总结一下。这些xO一般都具有简单的结构,如setter/getter/toString
- POJO:Plain Old/Ordinary Java Object,是其他xO的统称。笔者也喜欢用bean来统称这些xO,但后来觉得不准确,因为bean一般指spring容器所管理的bean
- DTO:Data Transfer Object,用来作为Controller的出参和Service的出参。一般分为两类:Controller的入参叫xxxReqDTO,Service层的出参叫xxxRespDTO。也有很多系统并不分得这么细。
- DO:Data Object,用来和单表一一对应的实体类。也有资料显示DO是Domain Object(域对象),
- EO:Entity Object,实体对象。有些公司用来表示跟表一一对应的类,即相当于DO。
- PO:记得最初的阿里Java文档定义为Persistence Object,持久化对象,当时文档说是跟表一一对应的,不知道后来的文档为什么改成了DO(难道记错了?)
- VO:View Object,阿里Java文档中说用来跟前端页面一一对应的对象。偶尔会有用错的情形,比如用来作为Controller层的入参
- BO:Business Object,阿里Java文档说明由 Service 层输出的封装业务逻辑的对象。不理解
- AO:Application Object,应用对象,不知道什么用。
其实搞这么多xO,有时候真的会影响效率,尤其非大型公司需要快。
【阿里Java手册】
POJO(Plain Ordinary Java Object): 在本手册中,POJO 专指只有 setter/getter/toString 的简单类,包括 DO/DTO/BO/VO 等。
DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
BO(Business Object):业务对象,由 Service 层输出的封装业务逻辑的对象。
AO(Application Object):应用对象,在 Web 层与 Service 层之间抽象的复用对象模型,极为贴 近展示层,复用度不高。
VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。
总结:这么多O&#