相关疑难解决方法(0)

聚合根中子实体的目的是什么?

[从这个问题和评论中跟进:实体是否应该有方法,如果有,如何防止它们被外部聚合调用]

正如标题所说:我不清楚作为孩子的实体的实际/确切目的是什么?

根据我在很多地方读到的内容,这些是作为聚合子项的实体的属性:

  1. 它具有本地身份以进行聚合
  2. 它不能直接访问,只能通过聚合根访问
  3. 应该有方法
  4. 它不应该从聚合中暴露出来

在我看来,这转化为几个问题:

  1. 实体应该是私有的聚合
  2. 我们需要一个只读副本 Value-Object 来公开来自实体的信息(例如,至少让存储库能够读取它以保存到数据库)
  3. 我们在实体上拥有的方法在 Aggregate 上重复(或者,反之亦然,我们必须在 Aggregate 上拥有的处理实体的方法在实体上重复)

那么,为什么我们有一个实体而不是只有值对象?只有值对象、聚合和公开值对象的所有方法(我们已经复制实体信息)看起来更方便。

附注。我想将子实体集中在聚合上,而不是实体集合上。


[更新以回应康斯坦丁·加尔贝努的回答和评论]

那么,实际上,你会有这样的事情吗?

public class Aggregate {
    ...
    private _someNestedEntity;

    public SomeNestedEntityImmutableState EntityState {
       get {
          return this._someNestedEntity.getState();
       }
    }

    public ChangeSomethingOnNestedEntity(params) {
       this._someNestedEntity.someCommandMethod(params);
    }
}
Run Code Online (Sandbox Code Playgroud)

domain-driven-design

5
推荐指数
1
解决办法
1304
查看次数

标签 统计

domain-driven-design ×1