DDD通过父级修改子对象

时间:2014-07-01 18:11:50

标签: domain-driven-design

我正在编写每月支出申请,其中您将“支出”添加到一个月,这些支出包含对支出和金额的描述。例如,您可能有2015年4月,并且在此之内您有支出项目,例如:

  • 新车轮胎$ 200
  • 水电费$ 350

等...

我写了以下内容,因此您可以在月中添加项目

class ExpenditureMonth
{
    public function addExpenditureItem(String description, Money amount)
    {
        items.add(new ExpenditureItem(this, description, amount));
    }
}

因此,ExpenditureItem的对象创建发生在ExpenditureMonth内。支出月份可以包含许多项目。

当帐户持有人为某件商品付款时,需要将其标记为已付款。

如何将项目设置为付费?

我唯一的想法是设置ExpenditureItem的标识符并将此实例传递给addExpenditureItem方法,但这对我来说似乎不合适?!

1 个答案:

答案 0 :(得分:1)

之前我有类似的question(请阅读答案)。

在DDD中,父节点或聚合根节点会根据有界上下文发生更改。所以在您的情况下,这是您的上下文:

  

当帐户持有人为某件商品付款时,需要将其标记为已付款。

对于该特定上下文,支出项目现在是聚合根,现在它需要自己识别ID。设置ID或GUID是普遍接受的解决方案,我认为在没有正确密钥的情况下唯一标识对象是不可靠的。

但是,如果案件是“帐​​户持有人支付了他所有的每月未付支出(或所有未支付的支出)”,则对于该上下文,聚合根是您的每月支出。