我正在编写每月支出申请,其中您将“支出”添加到一个月,这些支出包含对支出和金额的描述。例如,您可能有2015年4月,并且在此之内您有支出项目,例如:
等...
我写了以下内容,因此您可以在月中添加项目
class ExpenditureMonth
{
public function addExpenditureItem(String description, Money amount)
{
items.add(new ExpenditureItem(this, description, amount));
}
}
因此,ExpenditureItem
的对象创建发生在ExpenditureMonth
内。支出月份可以包含许多项目。
当帐户持有人为某件商品付款时,需要将其标记为已付款。
如何将项目设置为付费?
我唯一的想法是设置ExpenditureItem
的标识符并将此实例传递给addExpenditureItem
方法,但这对我来说似乎不合适?!
答案 0 :(得分:1)
之前我有类似的question(请阅读答案)。
在DDD中,父节点或聚合根节点会根据有界上下文发生更改。所以在您的情况下,这是您的上下文:
当帐户持有人为某件商品付款时,需要将其标记为已付款。
对于该特定上下文,支出项目现在是聚合根,现在它需要自己识别ID。设置ID或GUID是普遍接受的解决方案,我认为在没有正确密钥的情况下唯一标识对象是不可靠的。
但是,如果案件是“帐户持有人支付了他所有的每月未付支出(或所有未支付的支出)”,则对于该上下文,聚合根是您的每月支出。