【发布时间】:2013-05-22 17:54:17
【问题描述】:
Eric Evan 的 DDD 书,第 1 页。 152:
仅为实际需要的 AGGREGATE 根提供存储库 直接访问。
1。 是否应该通过那些确实需要直接访问的聚合根的存储库来检索和保存不需要直接访问的聚合根?
例如,如果我们有 Customer 和 Order 聚合根,并且无论出于何种原因我们不需要直接访问 Order AR,那么我假设只有 orders 可以是通过遍历Customer.Orders属性获得的吗?
2。
ICustomerRepository 应该何时检索订单?当Customer AR 被检索(通过ICustomerRepository.GetCustomer)或者当我们遍历Customer.GetOrders 属性时?
3。
ICustomerRepository 自己应该检索订单,还是应该将此责任委托给IOrderRepository?如果是后者,那么一种选择是将IOrderRepository 注入ICustomerRepository。但是由于外部代码不应该知道IOrderRepository 甚至存在(如果外部代码知道它的存在,那么它也可以直接使用IOrderRepository),那么ICustomerRepository 应该如何获得对IOrderREpository 的引用?
更新:
1
关于实现,如果使用像 NHibernate 这样的 ORM, 不需要 IOrderRepository。
a) 你是说在使用 ORM 时,我们通常不需要实现存储库,因为 ORM 隐含地提供了它们?
b) 我确实计划学习一种 ORM 技术(可能是 EF),但是从我读过的关于 ORM 的内容来看,似乎如果你想将域或应用层与持久层完全分离,那么这两层应该'不使用 ORM 表达式,这也意味着 ORM 表达式和 POCO 应该只存在于 Repository 实现中?
c) 如果存在某种情况,由于某种原因 AR root 没有直接访问权限(并且项目不使用 ORM),那么您对 3. 的回答是什么?
谢谢
【问题讨论】:
标签: domain-driven-design ddd-repositories aggregateroot