模式切换
POJO、DTO、DAO、PO、BO、VO、QO、Entity 详解
1 POJO(Plain Ordinary Java Object,简单Java对象)
这是一个普通的 Java 对象,通常用于表示数据实体,它通常包含私有字段和公共的 getter 和 setter 方法,但没有业务逻辑。POJO 主要用于将数据存储和传输到不同层次或组件中,如数据库、前端 UI 等。
POJO 的内在含义是指:那些没有继承任何类、也没有实现任何接口,更没有被其它框架侵入的 Java 对象。 它仅包含自身的属性以及自身属性的 getter 和 setter 方法,这意味者 POJO 可以方便的从一个框架迁移到另一个框架中,或者框架升级也会对代码毫无影响,因此而得到复用。
一般情况下,当需要持久化对象时,开发者喜欢将该对象放在名为 xxxPOJO 的目录中。当然,不建议这样命名。 POJO 实际上是包括 BO/VO/PO/DO 等一系列对象的总称。有的团队规定禁止命名成 xxxPOJO。
2 PO(Persistence Object,持久层对象)
PO 通常指持久化对象,是与数据库表或其他数据存储中的实体相对应的 Java 对象。它包含数据字段的映射以及用于数据库交互的方法。
PO 是在 ORM(对象关系映射)中与数据表的一条记录相匹配,自身属性与数据表字段一一对应。可以将数据表中的一条记录作为一个对象处理,并可以转化为其它对象。 面对不同的数据源时,比如文档型数据库,对象型数据库等时,顾名思义PO是DAO层为进行持久化操作而准备的对象。
3 DAO(Data Access Object,数据访问对象)
DAO 是一种用于封装对数据库或其他数据存储的访问的对象。它通常包含 CRUD(创建、读取、更新、删除)操作,以便在应用程序中对数据进行持久化和检索。
4 DTO(Data Transfer Object,数据传输对象)
DTO 是一种用于在不同层次之间传输数据的对象。它通常用于封装一组数据,以便在不同组件或服务之间传递数据,减少数据传输时的复杂性。DTO 通常不包含业务逻辑。
5 Entity(实体)
Entity 通常指实体,是与数据库表中的记录一一对应的 Java 对象。它包含数据字段的映射以及用于数据库交互的方法,通常与数据库的表结构紧密关联。
6 VO(View Object,显示层对象)
View Object 的含义是通常是 Web 向模板渲染引擎层传输的对象。《阿里巴巴开发手册》中建议把输出的显示层对象命名为 VO。当然,也有人把这个对象命名为 DTO 作为传输。
8 BO(Business Object,业务对象)
BO 是用于表示应用程序的业务逻辑的对象。它通常包含与业务相关的方法和规则。
9 QO(Query Object,查询对象)
QO 通常用于封装查询条件,以便将它们传递给数据访问层或服务以执行查询操作。它可以包含过滤条件、排序规则等信息。
11 总结
这些术语通常在不同层次的应用程序中使用,例如:
- POJO 和 DTO 用于数据传输和数据封装。
- DAO 和 ENTITY 用于数据访问和持久化。
- BO 和 VO 用于封装业务逻辑和不可变数据。
- QO 用于封装查询条件。
各对象的命名习惯:
- PO 通常放在名为 bean、entity、model 目录中。
- DAO 本身就是一层,通常是 dao、mapper、repository 目录。
- BO 通常在 service、manager、business,domain,model 目录中。
- DTO 通常在 command、representation、dto 目录中。