如果我有一个专为获取我的聚合根(由 Eric Evans DDD 定义)而设计的存储库,例如将 OrderLine 对象作为子对象的订单实体(根聚合)。
在某些情况下,我只想检索顶级对象,即没有 OrderLines 的 Order,而在其他情况下,我想带回更多,可能降低 2 个级别等,即 Order 和关联的 OrderLines。
Order/OrderLine 场景是一个简单的示例,但如果我的聚合根比这更深,可能会下降 3 或 4 个级别。
将其构建到存储库中的最佳/公认方式是什么(使用急切加载)?
最佳答案
Udi Dahan 在 TechEd 2008 上谈到了 Intentional Interfaces。在他的演讲中,他谈到了如何有意地从存储库中获取实体。你可以看他的presentation或 slides .
背后的想法是您根据要完成的任务来获取实体。例如,如果您要完成订单,则创建接口(interface) ICompleteOrder
与 Complete
方法和 map 特定FetchingStrategy
给它。然后你可以使用类似 Repository.Find<ICompleteOrder>(orderIdentity)
并按照您在 FetchingStrategy
中指定的方式获取此实体.
关于domain-driven-design - DDD - 构建存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4099617/