2

ドメインに、3 レベルの深さのテーブル階層に格納されている集計があるとします。Orderドメインオブジェクトを--とOrderItems表記しましょうItemAttributes。また、データ層でリポジトリ パターンを使用すると仮定しましょう。

リポジトリにGetAllは、のリストを返すメソッドが含まれていますOrders

サービスレイヤーでRESTに従うため、使用します

  • GET /ordersリストを取得するには
  • GET /orders/{Id}コンクリートを手に入れるOrder

リストにはそれぞれの基本的なフィールドのみが含まれ、Order詳細は含まれていませんが、id によるクエリはより大きなオブジェクトを返します。

1 つの実体化Orderはコストのかかる操作であるため、いくつかのフィールドをクライアントに送信するためだけに完全な集計を取得するという事実は好ましくありません。一方、リポジトリは完全に初期化された集計のみを返さなければならないという合理的な規則に従うようにしています。

この困難をどのように解決できるでしょうか。

4

1 に答える 1

2

他の人が提案したCQRSは別として、単純な遅延読み込みはこの問題の良い解決策でしょうか? アクセスされない場合、注文アイテムはロードされません。または、遅延読み込みを使用できない場合は専用の OrderSummary/OrderStatus ドメイン オブジェクトですか?

また、重い骨材が本当に必要かどうかを常に再検討する価値があります。それを必要とするドメイン ルールがないだけかもしれません。たとえば、ライフ サイクルは、重い集計 (Group->User、または Product->BacklogItem など) を持つよく知られた「間違った理由」です。このテーマについて読むことを強くお勧めします: Aggregate design

于 2013-05-16T23:42:45.577 に答える