跳到主要内容
版本:Next

聚合根实体

本文档引用的文件

目录

  1. 引言
  2. 实体结构与字段定义
  3. 审计能力继承
  4. 构造函数与业务规则验证
  5. 行为方法详解
  6. 封装性与状态管理
  7. UML类图建议
  8. 结论

引言

MyEntityName 是领域驱动设计中的核心聚合根实体,承载了业务规则、状态管理和数据持久化的关键职责。该实体通过继承 ABP 框架的 FullAuditedAggregateRoot<Guid> 实现了完整的审计追踪能力,并通过受保护的属性访问控制确保所有状态变更都必须通过显式的领域行为方法完成。本文档详细解析其结构、行为及设计原则。

本节不涉及具体源码分析,因此无引用文件

实体结构与字段定义

MyEntityName 实体定义了以下核心字段,用于描述其业务状态:

  • Code: 编号,字符串类型,表示实体的唯一编码,最大长度由 MyEntityNameConsts.MaxCodeLength 控制(默认64字符)
  • Name: 名称,字符串类型,表示实体的可读名称,最大长度由 MyEntityNameConsts.MaxNameLength 控制(默认64字符)
  • Sort: 排序,整型,用于控制实体在列表中的显示顺序
  • Remark: 备注,字符串类型,附加说明信息,最大长度由 MyEntityNameConsts.MaxRemarkLength 控制(默认256字符)
  • IsDisabled: 是否禁用,可空布尔类型,表示实体是否处于禁用状态

这些字段均采用 virtual 修饰并提供 protected set,以支持 ORM 映射和领域封装。

本节来源

审计能力继承

MyEntityName 继承自 FullAuditedAggregateRoot<Guid>,自动获得以下审计能力:

  • 创建人信息CreatorId 字段记录创建该实体的用户ID
  • 创建时间CreationTime 字段记录实体创建的时间戳
  • 最后修改人信息LastModifierId 字段记录最后一次修改该实体的用户ID
  • 最后修改时间LastModificationTime 字段记录最后一次修改的时间戳
  • 软删除支持:通过 IsDeletedDeleterIdDeletionTime 支持逻辑删除

这些审计字段由 ABP 框架在实体生命周期中自动填充,无需手动设置,确保了操作的可追溯性和安全性。

本节来源

构造函数与业务规则验证

MyEntityName 提供了两个构造函数:

  1. 受保护的无参构造函数:供 ORM 框架反序列化使用
  2. 公共构造函数:用于创建新实体实例,接收 idcodename 等参数

在构造函数中,通过 ABP 框架的 Check 工具类实现了严格的业务规则验证:

  • 使用 Check.NotNullOrWhiteSpace(code, "编号", MyEntityNameConsts.MaxCodeLength) 验证编号非空且不超过最大长度
  • 使用 Check.NotNullOrWhiteSpace(name, "名称", MyEntityNameConsts.MaxNameLength) 验证名称非空且不超过最大长度
  • 使用 Check.Length(remark, "备注", MyEntityNameConsts.MaxRemarkLength) 验证备注长度限制

这些验证逻辑引用了 MyEntityNameConsts 类中定义的常量,实现了业务规则的集中管理与配置化。

本节来源

行为方法详解

MyEntityName 定义了多个领域行为方法,用于封装状态变更逻辑:

  • Update: 更新实体的基本信息(编号、名称、备注)及禁用状态。方法内部重新执行与构造函数相同的验证逻辑,确保数据一致性。
  • AdjustSort: 专门用于调整排序值的方法,体现了“行为即意图”的设计原则。
  • Clone: 创建当前实体的副本,接收新的 ID、名称和排序值,复用原有 Code 和 Remark,常用于复制功能。

这些方法均以动词命名,清晰表达了其业务语义,并在方法内部维护了业务规则的一致性。

本节来源

封装性与状态管理

MyEntityName 通过以下方式实现了良好的封装性:

  • 所有属性的 set 访问器均为 protected,禁止外部直接修改状态
  • 所有状态变更必须通过显式定义的领域行为方法(如 UpdateAdjustSort)完成
  • 构造函数和行为方法中均包含完整的业务规则验证
  • 使用 virtual 关键字支持 EF Core 的延迟加载和代理功能

这种设计确保了实体始终处于有效状态,避免了无效或不一致的数据变更。

本节来源

UML类图建议

以下是 MyEntityName 聚合根及其相关类的 UML 类图建议,展示其属性、方法及与常量类的关系。

图示来源

结论

MyEntityName 作为一个典型的聚合根实体,充分体现了领域驱动设计的核心原则:通过继承 FullAuditedAggregateRoot<Guid> 获得完整的审计能力,通过构造函数和行为方法实现业务规则的内建验证,通过受保护的 set 访问器确保状态变更的可控性。其设计不仅保证了数据的一致性和完整性,也为未来的扩展和维护提供了坚实的基础。

本节不涉及具体源码分析,因此无引用文件