聚合根如何删除其中一个子节点?

时间:2009-11-12 20:24:31

标签: domain-driven-design aggregate ddd-repositories

如果我对Aggregate Roots的理解是正确的,那么root也应该对删除其中一个“孩子”负责。这似乎会转化为这样的事情:

order.removeOrderLine(23);

哪会有效地将其从集合中删除。但是,这是如何持续存在的?我的ORM的UnitOfWork是否应该检测到该集合中缺少某些内容,然后将其从数据库中删除?

我应该删除OrderOpository的removeOrderLine方法吗?

1 个答案:

答案 0 :(得分:4)

您的工作单位通常应该注意这一点,但这取决于它的实施,特别是它检测到变化的方式。某些工作单元实现(即Hibernate)在更改之前会保留聚合的副本,因此在业务事务结束时(当您调用unitOfWork.PersistAll()时),它会尝试匹配所有对象的当前版本(和原始版本的集合。

其他方式是让您的域实体更多地与您的工作单元耦合,以便实体在发生更改时通知工作单元(即order.removeOrderLine方法将通知工作单元有关更改)。

有多种方法可以实现UoW变化检测。看看hibernat的几个实现的灵感。