Eric Evan の DDD 本、pg. 152:
実際に直接アクセスする必要がある AGGREGATE ルートにのみリポジトリを提供します。
1. 直接アクセスを必要としない集約ルートは、直接アクセスを必要とする集約ルートのリポジトリを介して取得および保存する必要がありますか?
たとえば、Aggregate ルートがCustomer
ありOrder
、何らかの理由でOrder
AR に直接アクセスする必要がない場合、注文を取得できる唯一の方法はCustomer.Orders
プロパティをトラバースすることだと思いますか?
2.いつ注文ICustomerRepository
を取得する必要がありますか? AR が ( 経由で) 取得されるとき、またはプロパティをトラバースするとき?Customer
ICustomerRepository.GetCustomer
Customer.GetOrders
3.それ自体が注文ICustomerRepository
を取得する必要がありますか、それともこの責任を 後者の場合、1 つのオプションは に注入することです。しかし、外部コードはその存在すら認識すべきではないため(外部コードがその存在を認識している場合は、直接 を使用することもできます)、どのようにして への参照を取得する必要がありますか?IOrderRepository
IOrderRepository
ICustomerRepository
IOrderRepository
IOrderRepository
ICustomerRepository
IOrderREpository
アップデート:
1
実装に関しては、NHibernate のような ORM で行う場合、IOrderRepository は必要ありません。
a) ORM を使用する場合、ORM はリポジトリを暗黙的に提供するため、通常はリポジトリを実装する必要がないということですか?
b) ORM テクノロジの 1 つ (おそらく EF ) を学習する予定ですが、ORM について読んだことがほとんどないため、ドメイン層またはアプリケーション層を永続層から完全に切り離したい場合は、これらの 2 つの層を使用しないでください。 ORM 式。これは、ORM 式と POCO がリポジトリ実装内にのみ存在する必要があることも意味しますか?
c) 何らかの理由で AR ルートに直接アクセスできない (そしてプロジェクトが ORM を使用しない) シナリオがある場合、3. に対するあなたの答えは何ですか?
ありがとう