让我们考虑典型的Order和OrderItem示例。假设OrderItem是Order Aggregate 的一部分,它只能通过 Order 添加。因此,要向 Order 添加新的OrderItem ,我们必须通过 Repository 加载整个 Aggregate,向Order对象添加新项目并再次持久化整个 Aggregate。
这似乎有很多开销。如果我们的Order有 10 个OrderItems怎么办?这样,仅仅添加一个新的OrderItem,我们不仅要读取 10 个OrderItems,而且我们还应该重新插入所有这 10 个OrderItems。(这是 Jimmy Nillson 在他的 DDD 书中采用的方法。每次他想要持久化一个 Aggregate 时,他都会清除所有子对象,然后再次重新插入它们。这可能会导致其他问题,因为孩子的 ID 是由于数据库中的 IDENTITY 列,每次都更改。)
我知道有些人可能会建议在聚合根中应用工作单元模式,以便跟踪已更改的内容并仅提交这些更改。但这违反了持久性无知 (PI) 原则,因为持久性逻辑正在泄漏到领域模型中。
有没有人考虑过这个?
莫什