3

如果我对聚合根的理解是正确的,那么根也应该负责删除它的一个“孩子”。这似乎会转化为这样的东西:

order.removeOrderLine(23);

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

我应该用 removeOrderLine 代替 OrderRepository 的方法吗?

4

1 回答 1

4

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

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

有多种方法可以实现 UoW 更改检测。查看 hibernat 的几个实现以获得灵感。

于 2009-11-12T20:40:02.177 回答