Mos*_*osh 5 persistence domain-driven-design aggregate aggregateroot persistence-ignorance
让我们考虑典型的Order和OrderItem示例.假设OrderItem是Order Aggregate的一部分,它只能通过Order添加.所以,新添加OrderItem的一个订单,我们必须通过信息库加载整个集合,添加一个新项目的订单对象,并再次坚持整个集合.
这似乎有很多开销.如果我们的订单有10个OrderItems怎么办?这样,只是为了添加一个新的OrderItem,我们不仅需要读取10个OrderItems,而且我们还应该重新插入所有这10个OrderItems.(这是Jimmy Nillson在他的DDD书中采用的方法.每次他想要坚持一个Aggregate,他清除所有子对象,然后再次重新插入它们.这可能会导致其他问题,因为孩子的ID是由于数据库中的IDENTITY列,每次都会更改.)
我知道有些人可能会建议在Aggregate Root中应用Unit of Work模式,以便跟踪已更改的内容并仅提交这些更改.但这违反了持久性无知(PI)原则,因为持久性逻辑正在泄漏到域模型中.
以前有人想过这件事吗?
MOSH
这不一定是问题,一些 ORM 支持惰性列表。例如,您可以加载订单实体并将项目添加到详细信息集合中,而无需实际具体化该列表中的所有其他实体。
我认为 N/Hibernate 支持这一点。
如果您正在编写自己的实体持久性代码而不使用任何 ORM,那么您就很不走运,您将不得不重新实现与 ORMappers 免费提供的相同的脏跟踪机制。
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |