ABP DDD 实体源码解读——7 层基类的设计逻辑和适用场景 - DLForge

文章目录

ABP DDD 实体源码解读——7 层基类的设计逻辑和适用场景 - DLForge

ABP 的实体体系不是一次设计出 7 层的,而是逐层递增,每个层次解决一个问题。 科技新闻。

这三个基类对应接口 ICreationAuditedObject → IAuditedObject → IFullAuditedObject,逐层继承:

因为不是所有实体都是聚合根。DDD 中聚合根是数据一致性的边界,只有聚合根才能拥有仓储。如果所有实体都用 AggregateRoot,就无法区分哪些实体是独立数据入口、哪些是子实体。

DD背景与起因

这个字典在保存到数据库时,通过值转换器(Value Converter)序列化为 JSON 字符串存入一个字段。查询时反序列化回来。这样不用增加数据库列,就能动态添加属性。

在 AggregateRoot 构造函数中自动生成,而不是让开发者手动设置。当 EF Core 更新实体时,会比较数据库中的 ConcurrencyStamp 和当前值,如果不一致说明数据被其他用户修改了,抛出 DbUpdateConcurrencyException。

ExtraProperties 是字典,可以随时添加自定义字段而不需要改数据库表结构。ConcurrencyStamp 用于乐观锁并发控制。

DD事件经过

源码在 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/,看每个基类实际加了什么。

最基本的实体接口。只定义了"获取主键",不指定主键类型。复合主键返回多个值,单主键返回一个值。

聚合根和实体的区别:聚合根可以产生领域事件,是 DDD 中数据一致性的边界。只有聚合根可以有仓储。

DD各方回应

原则:够用就好。不需要软删除就不要用 FullAudited,避免不必要的字段和查询条件。自己在开发中要好好学习这个思想,引发了热烈讨论。

声明:本文信息来源于相关渠道或网络,版权归原作者所有。如涉及版权问题请及时与本站联系删除。本文观点仅供参考,不代表本站立场。
天枢新闻网
天枢新闻网资深内容创作者,致力于为广大读者提供及时、准确、深度的新闻资讯与行业分析。
领域:科技 发布:2026-08-03