3

さまざまな著者による投稿を含むブログがあり、著者は自分が書いた記事を見ることができるはずです。

次に、エンティティ フレームワークの db コンテキストを使用してクエリを作成します。

問題は、コントローラーまたはモデル クラスの特定のアクション メソッドのどこにクエリを配置するかです。

私はちょっと新しいので、このことは私を混乱させてきました。

4

3 に答える 3

4

コントローラは可能な限りスリムにする必要があります

したがって、クエリを配置するのに最適な場所は、コントローラーアクションの外部です。通常、あらゆる種類の永続性クエリの場所は、リポジトリ(リポジトリパターン)またはビジネスロジックレイヤーです。実際には、アプリケーションの複雑さに依存します。

要するに、リポジトリパターンとは、永続性とそのクエリ方法に関する知識を含むアプリケーション内の場所が1つしかないということです。通常、そこにCRUD操作を見つけることができます。また、通常、「ドメインコンテキスト」(注文、ブログ投稿など)ごとに1つのリポジトリがあります。

例(小さなアプリのワークフロー):

OrderController -> OrderRepository -> Persistance
CreateOrderAction -> SaveOrder -> Query

なぜなら。考えてみてください。持っていてOrderController、たとえば、SpecialOrderController両方に注文データが必要な場合はどうなりますか?その場合、クエリコードの重複が発生し、リポジトリパターンの場合は、この「トラップ」を回避します。ご存知のように、 DRYの原理は私たちの職人技の中で最も優れたものの1つです。

于 2013-03-09T15:33:36.323 に答える
1

アプリケーションのレイヤーによって異なります。それがMVCであるという事実は重要ではありません。データレイヤーはありますか?もしそうなら、それはそこに行きます。

これは、クエリがWinFormsアプリのどこに行くかを尋ねるのと少し似ています。繰り返しになりますが、これが重要なアプリである場合は、おそらくUI、おそらくサービスレイヤー、ビジネスロジックレイヤー、およびデータレイヤーがあります。データレイヤーは、クエリが移動する場所です。

MVCアプリでは、コントローラーはビュー内のイベントに反応する方法を知っています。私が取り組んだアプリでは、コントローラーがビジネスロジックレイヤーを呼び出し、BLLがデータレイヤーに接続します。これは些細なアプリではやり過ぎでしょうが、アプリケーションがどれほど広範囲に及ぶかはわかりません。

BLLとDALがモデルです。したがって、簡単な答えは次のとおりです。

クエリは、コントローラーではなくモデルに属します。

于 2013-03-09T15:04:45.533 に答える
1

この種のクエリをリポジトリ クラスに入れます。そうすれば、アプリケーションの複数の部分で同じクエリを使用できるようになります。

于 2013-03-09T15:04:01.370 に答える