domain-driven-design - DDD - 构建存储库

标签 domain-driven-design repository-pattern aggregate

如果我有一个专为获取我的聚合根(由 Eric Evans DDD 定义)而设计的存储库,例如将 OrderLine 对象作为子对象的订单实体(根聚合)。

在某些情况下,我只想检索顶级对象,即没有 OrderLines 的 Order,而在其他情况下,我想带回更多,可能降低 2 个级别等,即 Order 和关联的 OrderLines。

Order/OrderLine 场景是一个简单的示例,但如果我的聚合根比这更深,可能会下降 3 或 4 个级别。

将其构建到存储库中的最佳/公认方式是什么(使用急切加载)?

最佳答案

Udi Dahan 在 TechEd 2008 上谈到了 Intentional Interfaces。在他的演讲中,他谈到了如何有意地从存储库中获取实体。你可以看他的presentationslides .

背后的想法是您根据要完成的任务来获取实体。例如,如果您要完成订单,则创建接口(interface) ICompleteOrderComplete方法和 map 特定FetchingStrategy给它。然后你可以使用类似 Repository.Find<ICompleteOrder>(orderIdentity)并按照您在 FetchingStrategy 中指定的方式获取此实体.

关于domain-driven-design - DDD - 构建存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4099617/

相关文章:

c# - ASP.NET MVC 项目层

domain-driven-design - 埃里克·埃文斯(Eric Evans)的书 - cargo 运输示例

entity-framework - 用于更新整个聚合的通用存储库

domain-driven-design - DDD、存储库和封装

ruby - 我如何接收对 ruby​​ 事件记录的聚合查询?

python - Pandas :将不同的功能应用于不同的列

c# - 关于继承的域模型问题

asp.net - 如何从 Entity Framework 中的上下文中取消附加实体?

python - 按间隔分隔对数据框进行分组

c# - 实现存储库模式的最佳方式?