回答:
ASP.net MVCの主な利点は次のとおりです。
レンダリングされたHTMLを完全に制御できるようにします。
懸念事項(SoC)を明確に分離します。
テスト駆動開発(TDD)を有効にします。
JavaScriptフレームワークとの簡単な統合。
Webのステートレスな性質の設計に従う。
SEOを可能にするRESTfulなURL。
ViewStateおよびPostBackイベントなし
ASP.net Webフォームの主な利点は次のとおりです。
RAD開発を 提供します
Winform開発からの開発者向けの簡単な開発モデル。
ASP.NET WebフォームとMVCは、Microsoftが開発した2つのWebフレームワークです。どちらも優れた選択肢です。どちらのWebフレームワークも他のものに置き換えられることはなく、それらを単一のフレームワークに「マージ」する計画もありません。継続的なサポートと開発はマイクロソフトによって並行して行われ、どちらも「なくなる」ことはありません。
これらの各Webフレームワークには、利点/欠点があります。Webアプリケーションを開発する際には、そのいくつかを考慮する必要があります。Webアプリケーションはどちらのテクノロジを使用しても開発できます。これにより、特定のアプリケーションの開発で、一方のテクノロジを他方のテクノロジよりも簡単に選択できます。
ASP.NET Webフォーム:
ASP.NET MVC:
認証、承認、構成、コンパイル、および展開はすべて、2つのWebフレームワーク間で共有される機能です。
古典的なASPを覚えている年齢の人なら誰でも、htmlとjavascriptが混ざったコードでページを開くという悪夢を覚えているでしょう。私は間違っている可能性があり、私がそうであるといいのですが、MVCはそれらの悪い昔に戻っているように見えます。
ASP.Netが登場したとき、それは救世主として称賛され、コードをコンテンツから分離し、WebデザイナーにHTMLを作成させ、コード作成者がコードの背後で作業できるようにしました。ViewStateを使用したくない場合は、オフにしました。何らかの理由でコードビハインドを使用したくない場合は、従来のASPと同じようにコードをHTML内に配置できます。PostBackを使用したくない場合は、処理のために別のページにリダイレクトしました。ASP.Netコントロールを使用したくない場合は、標準のHTMLコントロールを使用しました。コントロールでASP.Net runat = "server"を使用しない場合は、Responseオブジェクトに問い合わせることもできます。
今、彼らの素晴らしい知恵の誰か(おそらく古典的なASPをプログラムしたことがない人)が、コードとコンテンツを混在させる時代に戻り、それを「懸念の分離」と呼ぶ時がきたと判断しました。もちろん、よりクリーンなHTMLを作成できますが、従来のASPを使用することもできます。「ビュー内にコードが多すぎると、正しくプログラミングできない」と言うのは、「クラシックASPで適切に構造化され、コメント化されたコードを記述した場合、ASP.NETよりはるかにクリーンで優れている」と言うようなものです。
コードとコンテンツの混合に戻りたい場合は、そのような開発のためのはるかに成熟した環境を持つPHPを使用して開発することを検討します。ASP.NETに非常に多くの問題がある場合は、それらの問題を修正してみませんか?
最後になりましたが、新しいRazorエンジンは、htmlとコードを区別することがさらに困難であることを意味します。少なくとも、ASPで開始タグと終了タグ、つまり<%と%>を探すことはできましたが、現在は@記号のみが示されています。
PHPに移行して、誰かがコードをコンテンツからもう一度分離するのをさらに10年待つときかもしれません。
PHPやJSPなどの他の開発者と作業している場合(そしてレールを推測している場合)、ページでの変換やコラボレーションは、「厄介な」ASP.NETがすべてないため、はるかに簡単になります。どこでもイベントとコントロール。
MVCの問題は、「エキスパート」であっても、貴重な時間を大量に消費し、多大な労力を必要とすることです。ビジネスは、背後にあるテクノロジーに関係なく、基本的な「機能するクイックソリューション」によって推進されます。WebFormsは、時間と費用を節約するRADテクノロジーです。より多くの時間を必要とするものは、企業によって受け入れられません。
私にとって最大の単一の利点は、モデル、ビュー、およびコントローラーレイヤー間の明確な分離です。最初から良いデザインを促進するのに役立ちます。
ASP.Netに対するMVCの利点は見たことがありません。10年前、MicrosoftはMVCに対する答えとしてUIP(ユーザーインターフェイスプロセス)を思いつきました。それはフロップでした。私たちは当時、UIPを使用して大規模なプロジェクト(開発者4人、設計者2人、テスター1人)を行っていましたが、それはまったくの悪夢でした。
誇大広告のためにバンドワゴンに飛び込むだけではいけません。上記のすべての利点は、Asp.Netで既に利用できます(Asp.Net 4でさらに多くの調整[ Asp.Net 4の新機能 ]を使用)。
Asp.Netを使用する開発チームまたは単一の開発者ファミリーの場合は、それに専念し、美しい製品をすばやく作成して、クライアント(勤務時間の支払いをする)を満足させます。MVCは貴重な時間を消費し、Asp.Netと同じ結果を生成します:-)
フランシス・シャナハン、
なぜ部分ポストバックを「ナンセンス」と呼ぶのですか?これはAjaxのコア機能であり、AtlasフレームワークやTelerikなどの素晴らしいサードパーティコントロールで非常によく利用されています
ビューステートに関するあなたの意見に同意します。ただし、開発者が慎重にビューステートを無効にすると、レンダリングされるHTMLのサイズを大幅に削減できるため、ページが軽量になります。
ASP.NET WebフォームモデルではHTMLサーバーコントロールのみが名前変更され、純粋なHTMLコントロールは名前が変更されません。それが何であれ、名前の変更が行われるとなぜあなたはそんなに心配ですか?クライアント側で多くのjavascriptイベントを処理したいのはわかっていますが、Webページをスマートに設計すれば、必要なすべてのIDを確実に取得できます
ASP.NET WebフォームでさえXHTML標準に適合しており、肥大化は見られません。これは、MVCパターンが必要な理由の正当化ではありません
繰り返しますが、なぜAXD Javascriptに悩まされるのですか?なぜそれはあなたを傷つけるのですか?これは有効な正当化ではありません
これまでのところ、私はクラシックASP.NET Webフォームを使用してアプリケーションを開発するのが好きです。例:ドロップダウンリストまたはグリッドビューをバインドする場合、最大30分、20行以下のコードが必要です(もちろん最小)。しかし、MVCの場合は、それがどれほど苦しいかを開発者に話します。
MVCの最大の欠点は、ASPの時代に戻ることです。サーバーコードとHTMLを混ぜ合わせたスパゲッティコードを覚えていますか?ああ、神様、javascript、HTML、JQuery、CSS、サーバータグを混ぜたMVC aspxページを読んでみてください。
Webフォームは、成熟度が高く、Telerikなどのサードパーティの制御プロバイダーからのサポートも得られます。
Webフォームでは、ほとんどすべてのHTMLを手動でレンダリングすることもできます。ただし、ビューステートやイベント検証など、PageAdaptersで削除できるタグはほとんどありません。GridViewや、不適切なHTMLレンダリング出力を持つその他のサーバー側コントロールを使用するように強制する人はいません。
MVCの最大の利点はスピードです!
次は、懸念の分離です。ただし、BLおよびDALロジック全体をコントローラー/アクション内に配置することを禁じていません。これは単にビューの分離であり、Webフォーム(MVPパターンなど)でも実行できます。mvcについて人々が言及していることの多くは、Webフォームで行うことができますが、追加の努力が必要です。
主な違いは、リクエストがビューではなくコントローラーに送られ、これらの2つのレイヤーが分離され、Webフォーム(aspx +コードビハインド)のような部分クラスを介して接続されないことです。
MVCを使用すると、1つのページに複数のフォームを表示できます。私が知っている小さな機能ですが、便利です。
また、特にMVCパターンにより、コードの保守が容易になります。あなたが数ヶ月後にそれを再訪するとき。
runat="server"
まだウェブフォームを使用したいときは非フォームタグであまり使用されていません。
MVCコントローラー:
[HttpGet]
public ActionResult DetailList(ImportDetailSearchModel model)
{
Data.ImportDataAccess ida = new Data.ImportDataAccess();
List<Data.ImportDetailData> data = ida.GetImportDetails(model.FileId, model.FailuresOnly);
return PartialView("ImportSummaryDetailPartial", data);
}
MVCビュー:
<table class="sortable">
<thead>
<tr><th>Unique Id</th><th class="left">Error Type</th><th class="left">Field</th><th class="left">Message</th><th class="left">State</th></tr>
</thead>
<tbody>
@foreach (Data.ImportDetailData detail in Model)
{
<tr><th>@detail.UniqueID</th><th class="left">@detail.ErrorType</th><th class="left">@detail.FieldName</th><th class="left">@detail.Message</th><th class="left">@detail.ItemState</th></tr>
}
</tbody></table>
どれくらい難しいですか?ViewStateなし、BSページライフサイクルなし...純粋に効率的なコード。
私が見つける主な利点は、プロジェクトをよりテストしやすい構造にすることです。これは、Webフォーム(MVPパターン)でもかなり簡単に実行できますが、開発者がこれを理解する必要がありますが、多くはできません。
WebフォームとMVCはどちらも実行可能なツールであり、どちらもさまざまな分野で優れています。
私は主にB2B / LOBアプリを開発しているため、個人的にはWebフォームを使用しています。しかし、単体テストで95%以上のコードカバレッジを達成できるMVPパターンで常にそれを行っています。これは、webcontrolsプロパティのプロパティのテストを自動化するのにも時間がかかります。
bool IMyView.IsAdminSectionVisible{
get{return pnlAdmin.Visible;}
get{pnlAdmin.Visible=value;}
}
)このレベルのテストは、モデルを汚染することなく、MVCで簡単に達成できるとは思いません。
私の個人的な見解では、ASP.Net MVCを使用することの最大の欠点は、
それを維持する開発者にとって... html地獄とCODE BLOCKS
混合されるということです...HTML