让我们考虑一下典型的Order and 订单项目例子。假如说订单项目是的一部分Order聚合,只能通过订单添加。所以,要添加一个新的订单项目 to an Order,我们必须通过存储库加载整个聚合,将新项目添加到Order对象并再次保留整个聚合。
这看起来开销很大。如果我们的Order has 10 订单项目?这样,只需添加一个新的订单项目,我们不仅要读10订单项目,但我们还应该重新插入所有这 10 个订单项目再次。 (这是 Jimmy Nillson 在他的 DDD 书中采用的方法。每次他想要持久化一个聚合时,他都会清除所有子对象,然后再次重新插入它们。这可能会导致其他问题,因为子对象的 ID 是由于数据库中的 IDENTITY 列,每次都会更改。)
我知道有些人可能建议在聚合根应用工作单元模式,以便它跟踪已更改的内容并仅提交这些更改。但这违反了持久性无知(PI)原则,因为持久性逻辑正在泄漏到域模型中。
以前有人考虑过这个问题吗?
Mosh
这不一定是问题,一些 ORM 支持惰性列表。
例如
您可以加载订单实体并将项目添加到详细信息集合中,而无需实际具体化该列表中的所有其他实体。
我认为 N/Hibernate 支持这一点。
如果您正在编写自己的实体持久性代码而不使用任何 ORM,那么您就很不走运,您将不得不重新实现与 ORMappers 免费提供的相同的脏跟踪机制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)