根据 DDD 原则,所有处理与特定聚合根对象相关的实体的 CRUD 操作都应该由聚合根进行。
但是我们如何从 aggr 根中仅更改实体的单个属性?我们应该在实体中有 setter 方法吗?这些方法应该有哪些访问器?
或者可能所有实体都应该有一个指向它们聚合根的引用?
或者我们永远不会只改变一个属性,而是用一个全新的实体代替当前的实体状态?
请您参考如下方法:
According to DDD principles all CRUD operations working with entities related to a specific aggregate root object should be made by the aggregate root.
是的;您可以将聚合根视为 role interface这限制了应用程序如何操作模型。
But how do we change only a single property of an Entity from the aggr root? Should we have setter methods in Entities and what accessors should these methods have ?
聚合是由多个实体组成的事实是一个实现细节。因此,在角色界面背后,您可以以任何您喜欢的方式委派更改的责任。
理想情况下,如果您正在对领域模型中的实体更改进行建模,那么应该有描述更改的通用语言中的相应词汇表。换句话说,就像我们使用业务语言来描述对聚合根所做的更改一样,我们也使用相同的语言来描述对模型中实体的更改。
因此,“CRUD”操作往往是操纵其自身状态的实体的内部实现细节。当您发现自己需要获取/设置或创建/读取/更新/删除时,这暗示您正在从域模型过渡到数据模型。
Or we never change only a single property but replace the entity with a totally new one instead with the current entity state?
这可能表明您正在对应该对值进行建模的实体建模。