ビューのモデルは、独自のリポジトリを持つ集約である必要がありますか?

StackOverflow https://stackoverflow.com/questions/695876

質問

ビューに渡されるモデルは、単一のリポジトリへの単一の呼び出しによって完全に定義される必要があります。言い換えれば、モデルは単一の集合体ですか、それともサービス層でそれぞれ独自のリポジトリを持つ個別の集合体からモデルを構築する必要がありますか?

私の今のやり方は、単一のリポジトリを呼び出してモデル全体を埋め、それが View によって表示されるというものです。アグリゲート、リポジトリ、モデルはすべて同じ概念になりつつあるようです。

役に立ちましたか?

解決

私のそれは「上記のどれでもない」ためです。ビューにプレゼンテーションモデルを使用することを好みますが、プレゼンテーションモデルはリポジトリを必要としません。これにはさまざまな理由が考えられます。

  • プレゼンテーション モデルを使用すると、モデルとデータベースを設計する前にビューとコントローラを設計できます。そのため、ユーザーからの意見を早期に得ることができます。
  • プレゼンテーション モデルを使用すると、かなり「フラット」なモデルをビューに渡すことができるため、遅延読み込みなどの ORM の問題を心配する必要がありません。
  • 多くの場合、プレゼンテーション モデルはモデル バインディングを簡素化します。
  • プレゼンテーション モデルを使用する場合、正しいホワイトリストを取得できなかったために、特定のユーザーに表示を許可すべきではないフィールドを誤って返したり、ユーザーが更新を許可すべきではないフィールドを誤って更新したりすることを心配する必要はありません。

さて、より具体的にあなたの質問の行に従ってください:プレゼンテーション モデルのインスタンスを構築しましたか?リポジトリはいくつ必要ですか?さて、この質問はほぼ自動的に答えられます。ビューの要件に従ってプレゼンテーション モデルを設計します。集約ルートの識別など、適切な TDD プラクティスに従ってリポジトリを設計します。「このモデルをインスタンス化するには、いくつのリポジトリが必要か」という質問は簡単です。モデルに必要な集約ルートを調べて、必要なものを使用します。通常、これは 1 つの LINQ クエリで実行できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top