さまざまな著者による投稿を含むブログがあり、著者は自分が書いた記事を見ることができるはずです。
次に、エンティティ フレームワークの db コンテキストを使用してクエリを作成します。
問題は、コントローラーまたはモデル クラスの特定のアクション メソッドのどこにクエリを配置するかです。
私はちょっと新しいので、このことは私を混乱させてきました。
さまざまな著者による投稿を含むブログがあり、著者は自分が書いた記事を見ることができるはずです。
次に、エンティティ フレームワークの db コンテキストを使用してクエリを作成します。
問題は、コントローラーまたはモデル クラスの特定のアクション メソッドのどこにクエリを配置するかです。
私はちょっと新しいので、このことは私を混乱させてきました。
したがって、クエリを配置するのに最適な場所は、コントローラーアクションの外部です。通常、あらゆる種類の永続性クエリの場所は、リポジトリ(リポジトリパターン)またはビジネスロジックレイヤーです。実際には、アプリケーションの複雑さに依存します。
要するに、リポジトリパターンとは、永続性とそのクエリ方法に関する知識を含むアプリケーション内の場所が1つしかないということです。通常、そこにCRUD操作を見つけることができます。また、通常、「ドメインコンテキスト」(注文、ブログ投稿など)ごとに1つのリポジトリがあります。
例(小さなアプリのワークフロー):
OrderController -> OrderRepository -> Persistance
CreateOrderAction -> SaveOrder -> Query
なぜなら。考えてみてください。持っていてOrderController
、たとえば、SpecialOrderController
両方に注文データが必要な場合はどうなりますか?その場合、クエリコードの重複が発生し、リポジトリパターンの場合は、この「トラップ」を回避します。ご存知のように、 DRYの原理は私たちの職人技の中で最も優れたものの1つです。
アプリケーションのレイヤーによって異なります。それがMVCであるという事実は重要ではありません。データレイヤーはありますか?もしそうなら、それはそこに行きます。
これは、クエリがWinFormsアプリのどこに行くかを尋ねるのと少し似ています。繰り返しになりますが、これが重要なアプリである場合は、おそらくUI、おそらくサービスレイヤー、ビジネスロジックレイヤー、およびデータレイヤーがあります。データレイヤーは、クエリが移動する場所です。
MVCアプリでは、コントローラーはビュー内のイベントに反応する方法を知っています。私が取り組んだアプリでは、コントローラーがビジネスロジックレイヤーを呼び出し、BLLがデータレイヤーに接続します。これは些細なアプリではやり過ぎでしょうが、アプリケーションがどれほど広範囲に及ぶかはわかりません。
BLLとDALがモデルです。したがって、簡単な答えは次のとおりです。
クエリは、コントローラーではなくモデルに属します。
この種のクエリをリポジトリ クラスに入れます。そうすれば、アプリケーションの複数の部分で同じクエリを使用できるようになります。