如何删除值对象中的值对象 [DDD]

How to remove Value Object within Value Object [DDD]

我有一个关于 DDD 的问题。 如何删除 VO 中的 VO? 所以我有聚合 x 和 VO y。 在 VO y 中有一个 VO z 列表。 zListVO

现在我想从聚合中删除一个 zVO。

我可以做吗:(应用层的方法)

public void main 
{
  y.remove(zVO z)
}

汇总 X

private void Handle(RemovedZDE z)
{
    this.x.remove(z.z);
}

然后在 VO Y 中创建一个方法,从他们的 VO 列表中删除 z ?

ClassyVO

protected void Remove(zVO z)
{
  zListVO.remove(z);
}

通常,值对象模式的实例是不可变的;您通常没有命令(在 CQS 意义上),只有查询。

因此,更常见的是

new_y = old_y.remove(z)

I have aggregate x with a VO y. In VO y there is a list of VO z. zListVO

基本思路如下:

X::remove(Z z) {
   old_y = this.y
   new_y = old_y.remove(z)

   // X is an entity, so we normally update its state directly
   this.y = new_y
}

Y::remove(Z z) {
    old_list = y.zListVO
    new_list = old_list.remove(z)
    // Y is a value, so we create a new value to describe
    // the change
    return new Y(new_list)
}