0

しばらくの間、ASP.net MVC を掘り下げてきました。ほとんどのブログや投稿では、リポジトリ パターンを実装して Entity Framework を抽象化することが "ベスト プラクティス" であることが示されているようです。また、EF ドメイン エンティティを直接操作するのではなく、ビュー固有のモデルを利用することをお勧めします。

リポジトリにキャッシュの透明なレイヤーを実装するよりも、MVC アプリが Entity Framework について何も知る必要がなく、ビュー固有の POCO モデルにすべての EF メソッドとプロパティが添付されていないため、これはある程度理にかなっています。それらに (XML および JSON シリアライゼーションを台無しにする傾向があります)。

しかし、それが人々が「あるべき」開発方法である場合、Visual Studio のすべてのコントローラー/ビュー ウィザードとツールが Entity Framework に直接焦点を当てているのはなぜですか? http://www.asp.net/mvcにあるすべての Microsoft の例が、キャッシュを使用してリポジトリを作成し、ビュー固有のモデルを利用するのではなく、フレームワークとドメイン エンティティを直接操作しているように見えるのはなぜですか?

また、ビュー固有のモデルを使用する必要がある場合、ドメイン エンティティをコントローラー内のモデルにマッピングしていますか? 特定のフィールドだけが必要な場合、コントローラーにオブジェクト グラフを返すのは非効率的ではありませんか? または、リポジトリでビューモデル固有のメソッドを作成する必要がありますか?

4

2 に答える 2

1

http://www.asp.net/mvcにあるすべての Microsoft の例が、キャッシュを使用してリポジトリを作成し、ビュー固有のモデルを利用するのではなく、フレームワークとドメイン エンティティを直接操作しているように見えるのはなぜですか?

残念ながら、私は Visual Studio チームでこれらのウィザードを作成したり、http://asp.net/mvcサイトにコンテンツを公開したりする Microsoft の従業員ではないため、この質問に答えることができません。個人的に、私は Visual Studio のウィザードの 99% にアレルギーがあり、それらに触れたことはありません。

また、ビュー固有のモデルを使用する必要がある場合、ドメイン エンティティをコントローラー内のモデルにマッピングしていますか?

はい。または、 AutoMapperを使用してこのプロセスを簡素化し、コントローラー アクションを整理することもできます。

特定のフィールドだけが必要な場合、コントローラーにオブジェクト グラフを返すのは非効率的ではありませんか?

いいえ、効率的です。実際のところ、ビュー モデルにマッピングする場合よりも (パフォーマンスの点で) さらに高速です。ほとんどの場合、ドメイン モデルがビューの要件に適合していないだけです。そしてその瞬間から、ビュー内で悪夢が始まり、それらのドメイン モデルを適応させようとするスパゲッティ コードに変わります。ビューは非効率的になり、保守が容易ではなくなります。ドメイン モデルには、ビューに必要なすべての情報が含まれていないことがすぐにわかります。そして、次に何が起こりますか?あなたは私がアレルギーを持っている別の概念を使い始めます -ViewBag. したがって、特定のものを強く型付けされたモデルの形式でビューに渡し、他のものを弱く型付けされた構造体の形式で渡していると、物事が乱雑になります。また、ビュー モデルの代わりにドメイン モデルを使用するコントローラー アクションは、大量インジェクション攻撃に対して脆弱であり、検証などで問題が発生する可能性があります。

または、リポジトリでビューモデル固有のメソッドを作成する必要がありますか?

絶対違う。リポジトリは、ドメイン モデルでのみ機能します。ビューモデルが何であるかを知りません。

もちろん、それらはすべて私の 2¢ です。これがより適切で快適なパターンである場合は、それらを無視して、ビュー内の EF ドメイン モデルを直接操作してください。1 つまたは別のパターンを課そうとするのは正しくありません。ニーズに合ったものを使用してください。

于 2012-09-18T17:06:19.403 に答える
1

ベスト プラクティスと同様に、すべての状況を網羅しているわけではありません。リポジトリ パターンを使用することは、エンタープライズ ソリューションのベスト プラクティスと見なされます。ただし、多くのメンテナンスを必要としない簡単なWebサイトをまとめているだけの場合、それはかなりやり過ぎです. 常にベスト プラクティスを使用する必要があると言う人もいますが、実際には、うまく機能し、機能するものを作成したいだけであることがよくあります。その場合、生成されたメソッドは迅速かつ簡単です。

また、MVC を学習している場合は、リポジトリ パターンも学習する必要があります。経験豊富な開発者はおそらく自分のやり方でやりたいと思うので、MS は初心者を助けるために彼らが行った方法でセットアップしたと思います。

ただの予感ですが:p

于 2012-09-18T17:10:43.070 に答える