领域模型设计
本文档引用的文件
- MyEntityName.cs
- MyEntityNameSpecification.cs
- MyEntityNameEto.cs
- MyEntityNameEventHandler.cs
- IMyEntityNameRepository.cs
- MyEntityNameConsts.cs
- MyEntityNameAppService.cs
- MyEntityNameCreateDto.cs
- MyEntityNameUpdateDto.cs
- MyEntityNameDataSeedContributor.cs
目录
- 引言
- 聚合根结构与行为
- 实体字段定义
- 审计能力继承
- 工厂方法与构造逻辑
- 业务规则验证逻辑
- 状态变更行为
- 规格模式应用
- 领域事件机制
- 事件处理响应
- 值对象与不变性约束
- 领域服务边界
- UML类图建议
- 状态转换图
引言
本文档详细描述了MyEntityName作为领域驱动设计中的核心聚合根的完整领域模型。该模型体现了典型的DDD实践,包括聚合根、规格模式、领域事件、仓储接口等关键概念。通过分析其结构、行为和交互关系,帮助开发人员理解该领域的核心设计原则和实现方式。
聚合根结构与行为
MyEntityName是领域模型中的核心聚合根,继承自FullAuditedAggregateRoot<Guid>,封装了业务逻辑、数据完整性和行为规则。作为聚合根,它负责维护内部一致性,并通过明确定义的方法暴露可变操作。
Section sources
实体字段定义
MyEntityName聚合根包含以下核心字段,均通过受保护的set访问器确保只能通过领域方法进行修改:
- Code: 编号,字符串类型,最大长度由
MyEntityNameConsts.MaxCodeLength定义(默认64) - Name: 名称,字符串类型,最大长度由
MyEntityNameConsts.MaxNameLength定义(默认64) - Sort: 排序,整数类型,用于排序展示
- Remark: 备注,字符串类型,最大长度由
MyEntityNameConsts.MaxRemarkLength定义(默认256) - IsDisabled: 是否禁用,可空布尔类型,表示实体状态
所有字段均使用virtual关键字,支持EF Core的延迟加载和代理功能。
Section sources
审计能力继承
MyEntityName继承自FullAuditedAggregateRoot<Guid>,自动获得完整的审计能力,包括:
- CreationTime: 创建时间
- CreatorId: 创建者ID
- LastModificationTime: 最后修改时间
- LastModifierId: 最后修改者ID
- IsDeleted: 是否已删除(软删除)
- DeleterId: 删除者ID
- DeletionTime: 删除时间
这些审计字段由框架自动管理,无需在业务代码中手动设置,确保了审计信息的一致性和可靠性。
Section sources
工厂方法与构造逻辑
MyEntityName提供了两种构造方式:
- 受保护的无参构造函数:供ORM框架反序列化使用
- 公共有参构造函数:作为工厂方法创建新实例,接收
id、code、name等必要参数,并执行基础验证
构造过程中通过Check.NotNullOrWhiteSpace和Check.Length等断言方法确保输入数据的有效性,体现了"不变性在构造时建立"的设计原则。
Section sources