Webフォームと比較して、MVCは、HTML出力への低レベルのアプローチであり、ページ出力のより優れた制御と、より高レベルでよりアーキテクチャーに基づいたアプローチです。WebフォームとMVCをキャプチャして、従来のWebフォームトラップに陥らない限り、多くの状況で比較がWebフォームを支持すると思う理由を示します。
Webフォーム
Webフォームモデルでは、ページはブラウザからのページリクエストに直接対応しています。したがって、ユーザーを書籍のリストに誘導する場合、おそらくどこかに「Booklist.aspx」と呼ばれるページがあり、そこにユーザーを誘導します。そのページでは、そのリストを表示するために必要なすべてを提供する必要があります。これには、データをプルし、ビジネスロジックを適用し、結果を表示するためのコードが含まれます。ページに影響を与えるアーキテクチャロジックまたはルーティングロジックがある場合は、ページにもアーキテクチャロジックをコーディングする必要があります。 通常、優れた Webフォームの開発には、個別の(単体テスト可能な)DLLでのサポートクラスのセットの開発が含まれます。これらのクラスは、ビジネスロジック、データアクセス、アーキテクチャ/ルーティングの決定を処理します。
MVC
MVCは、Webアプリケーション開発のより「アーキテクチャ的」な見方をとります:構築する標準化された足場を提供します。また、確立されたアーキテクチャー内でモデル、ビュー、コントローラークラスを自動的に生成するためのツールも提供します。たとえば、Ruby on Rails(以降は単に「Rails」)とASP.NET MVCの両方で、Webアプリケーションアーキテクチャの全体的なモデルを反映するディレクトリ構造から常に開始します。ビュー、モデル、コントローラーを追加するには、Railsの「Railsスクリプト/生成足場{モデル名}」のようなコマンドを使用します(ASP.NET MVCはIDEで同様のコマンドを提供しています)。結果のコントローラークラスには、インデックス(リストの表示)、表示、新規、編集、破棄(少なくともRailsではMVCは同様)のメソッド( "アクション")があります。デフォルトでは、これらの "
MVCでは、ディレクトリとファイルのレイアウトが重要です。たとえば、ASP.NET MVCでは、「Book」オブジェクトのIndexメソッドには、おそらく「Return View();」という1行しかありません。これは、MVCの魔法を通して、Bookモデルを「/View/Books/Index.aspx」ページに送信します。このページには、Booksを表示するためのコードがあります。Railsのアプローチは似ていますが、ロジックは少し明示的で「マジック」が少なくなっています。A ビュー彼らは、ビジネスロジックやデータ処理のルーティングに関する限り心配する必要はありませんので、MVCアプリでページがWebフォームページより通常は簡単です。
比較
MVCの利点は、問題の明確な分離と、出力を生成するためのよりクリーンでHTML / CSS / AJAX / Javascript中心のモデルに関係しています。これにより、テスト性が向上し、より標準化された設計が提供され、より「Web 2.0」タイプのWebサイトへの扉が開かれます。
ただし、いくつかの重大な欠点もあります。
まず、デモサイトを導入するのは簡単ですが、全体的なアーキテクチャモデルには大きな学習曲線があります。彼らが "Convention Over Configuration"と言ったとき、それは良さそうに聞こえます-学ぶべき本の価値ある慣習があることに気づくまでは。さらに、明示的な呼び出しではなく魔法に依存しているため、何が起こっているのかを理解することは、多くの場合少し気が狂います。たとえば、 "Return View();" 上に電話しますか?まったく同じ呼び出しが他のアクションで見つかりますが、それらは別の場所に行きます。MVC規約を理解している場合そうすれば、なぜこれが行われるのかがわかります。ただし、これは確かに良い名前付けや簡単に理解できるコードの例としては適さず、Webフォームよりも新しい開発者が選択するのははるかに困難です(これは単なる意見ではありません。そして今年のMVCと生産性の違いが顕著になりました-Webフォームを支持しました)。ちなみに、Ruby on Railsは動的に名前が付けられたメソッドを備えているため、この点でRailsは少し優れています。
次に、MVCは、古典的なCRUDスタイルのWebサイトを構築していることを暗黙的に想定しています。アーキテクチャ上の決定、特にコードジェネレータはすべて、このタイプのWebアプリケーションをサポートするように構築されています。CRUDアプリケーションを構築していて、実績のあるアーキテクチャー(または単にアーキテクチャー設計を嫌う)を採用したい場合は、おそらくMVCを検討する必要があります。ただし、CRUDを超えることを行う場合や、アーキテクチャにある程度の能力がある場合は、基盤となるルーティングモデル(WebFormsアプリでの単純なルーティングよりもかなり複雑)をマスターするまで、MVCはストレートジャケットのように感じるかもしれません。それでも、いつもモデルと戦っていて、予期せぬ結果を心配しているような気がしました。
第3に、Linqを気にしない場合(Linq-to-SQLが消えてしまうのではないか、またはLinq-to-Entitiesが笑いすぎて生産力が不足していることがわかったため)、また、 ASP.NET MVC足場ツールはLinqを中心に構築されているので、この道を歩む必要があります(これは私にとってキラーでした)。Railsのデータモデルも、SQLに精通している場合(特に、TSQLとストアドプロシージャに精通している場合)に比べて、かなり扱いにくいものです。
第4に、MVCの支持者は、MVCビューは精神的にWebのHTML / CSS / AJAXモデルに近いと指摘しています。たとえば、「HTMLヘルパー」(コンテンツを入れ替えてHTMLコントロールに配置するビューページの小さなコード呼び出し)は、WebフォームコントロールよりもJavaScriptとの統合がはるかに簡単です。ただし、ASP.NET 4.0では、コントロールに名前を付ける機能が導入されているため、この利点はほとんどなくなります。
第5に、MVCの純粋主義者はしばしばViewstateを軽視します。場合によっては、そうするのが適切です。ただし、Viewstateは優れたツールであり、生産性の向上にも役立ちます。比較として、Viewstateの処理は、サードパーティのWebコントロールをMVCアプリに統合するよりもはるかに簡単です。MVCではコントロールの統合が簡単になるかもしれませんが、私が見た現在のすべての取り組みは、これらのコントロールをビューのコントローラークラスにリンクするために(つまり、MVCモデルを回避するために)コードを構築する必要があります。)。
結論
私は多くの点でMVC開発を好みます(ただし、私は、ASP.NET MVCよりもRailsを優先しています)。また、ASP.NET MVCはASP.NET Webフォームの「アンチパターン」であると考える罠に陥らないことが重要だと思います。それらは異なりますが、完全にエイリアンではなく、確かに両方の余地があります。
ただし、ほとんどのタスクでは、物事を成し遂げるのが簡単なため、Webフォームの開発を好みます(例外は、CRUDフォームのセットの生成です)。MVCはまた、ある程度、理論の過剰に苦しんでいるようです。 実際、ページ指向のASP.NETを知っているがMVCを試している人たちがSOでここで尋ねた多くの質問を見てください。例外なく、開発者はフープを飛び越えたり、巨大な学習曲線に耐えたりしないと基本的なタスクを実行できないことに気づくと、多くの歯が食い物になります。これは、私の本の中でMVCに優れたWebフォームを作るものです:MVCはあなたが支払う作る現実世界の価格を、または、さらに悪いもう少しテスト容易性を得るためには、単にとして見られるようにクールなあなたが使用しているので、最新の技術。
更新:私はコメントセクションでひどく批判されました-かなり公平なものもあります。したがって、私は数か月かけてRailsとASP.NET MVCを学習し、次の大きなことを見逃していないことを確認しました。もちろん、質問に対するバランスの取れた適切な回答を提供するのにも役立ちます。上記の応答は、コメントが同期していないように見える場合に備えて、私の最初の回答を大幅に書き換えたものであることを知っておく必要があります。
MVCをさらに詳しく調べていると、しばらくの間、メジャーカルパができると思いました。結局、私はWebフォームのアーキテクチャとテスト容易性にもっと多くのエネルギーを費やす必要があると思いますが、MVCは私のための要求に実際に答えることはないと結論付けました。それで、私の最初の答えについてインテリジェントな批評を提供してくれた人々に心からの「ありがとう」。
これを宗教的な戦いとみなし、絶えず投票の洪水を仕掛けた人々については、なぜあなたが気になるのかわかりません(20秒以上の反対の投票が複数の場合に互いに数秒以内にあるのは確かに正常ではありません)。この回答を読んでいて、スコアが他の回答のいくつかよりもはるかに低いことを考えると、私の回答に本当に「間違った」ものがあるかどうか疑問に思っている場合は、一般的な感覚よりも同意しない少数の人についてのほうが多いと安心してください。コミュニティ(全体として、これは100回以上賛成されています)。
実際、多くの開発者はMVCを気にしていません。実際、これは少数派の見解ではありません(ブログで示されているように、MS内でも)。