十多年了接触了挺多大型的开发项目,从而整理了这份面向对象的设计手册,分享给大家。
在大型的特别是 ToB 的项目中正确使用这些对象是非常重要的。但如果是小型项目,可以图方便只使用其中的一两种。(我平时也是这么做的)
Dto Vm Entity Vo Do
后缀 | 定义 | 用处 | 备注 | 三层架构 |
---|---|---|---|---|
DTO | 数据传输对象。通常只包含属性和 getter/setter 方法,没有任何业务逻辑。 | 用于在应用程序的不同层之间传输数据 | 不可变。 | service controller dao |
VM | 视图模型。通常用不可变对象的如 record 来表示。 | 映射视图中的数据,实现视图和模型之间的解耦。 | 不可变 | controller |
Entity | 实体对象。通常包含实体的属性和行为,但不包含复杂的业务逻辑 | 表示业务领域中的实体或对象,例如用户、订单、商品等。属于领域模型中的一部分。通常由数据访问层创建和管理。 | 有独立的生命周期 | dao |
Vo | 值对象。一种不可变的对象,它的值在创建后不会发生变化。不包含业务逻辑和复杂的计算。 | 一个独立的类,不直接依赖于业务逻辑或数据访问层;通常由领域模型或服务层创建和管理,用于表示一些简单的值。 | 没有独立的生命周期。 需要定义 equals 方法。 | service |
DO(Domain Object) | 领域模型。通常持有多个类成员如实体、值对象等构成领域业务的成员,并包含实现业务逻辑的复杂方法。 | 用于表示特定领域的业务概念和规则,封装应用程序的业务逻辑和行为。 | 有独立的生命周期。其持有的值对象的生命周期依赖于领域模型的生命周期。 | service |
Bean 与 PoJo
名称 | 定义 | 用处 |
---|---|---|
Bean | 遵循一些特定的规则。必须有一个无参的构造函数,并且属性必须使用 getter 和 setter 方法进行访问。 | 适合用于在不同的层之间传递数据,或者封装和业务无关的功能如 Spring 容器管理的对象等。 |
Pojo | 普通的 Java 对象,没有任何限制。 | 适用于各种场合,特别是和业务相关的场合,如映射数据库实体等。 |
联动贴: