最近、アーキテクトは、トヨタ(Webフォーム)だけが必要なときにロールスロイスソリューション(MVC)を提供すると当社を説明しました。
アーキテクチャの選択としてのWebフォームとMVCの比較について知りたいと思います。
ロールスロイス/トヨタのアナロジーはひどく欠陥があり、誤解を招くものです。 1つ(ASP.NET MVC)は、もう1つ(ASP.NET WebForms)の単純でより高価なバージョンではありません。これらは、ASP.NETを使用してWebアプリケーションを構築するための非常に異なるアプローチです。
私にとって、MVCとWebFormsのアーキテクチャ上の最大の違いは、Webのステートレス環境での動作方法です。WebFormsは、Webプログラミングのステートレスな性質を隠す一連の抽象化を構築するのに一生懸命に取り組んでいますが、MVCはステートレス環境を採用し、それ。
それぞれのアプローチにはメリットとデメリットがありますが、MVCを使用したWebサイトの構築がnaturalWebForms(その layer漏れやすい抽象化の層に )。
古い質問ですが、他の誰かが実際にジレンマを抱えている場合に備えて、より詳細な回答に値します。
結局のところ、webformsはシンクライアントソリューションです。これにより、多数のかわいいボタンを押すと、フロントエンド(クライアント)のものがビルドされます。 Webフォームでそれをクランクアウトする方法を知っている人がいて、保守性/変更可能性の懸念がまったくなく、サイトが完全に短期で使い捨てである場合、このアプローチには何の問題もありません。独自のものを行う方法を学ぶことは可能ですが、この場合、WebフォームのWebフォームが.NETアプリの開発者を保護しようとしていることと、ほとんどのクライアント側のWeb開発者がMicrosoftを殺害しようとするすべてのWebフォームのものを知る必要があります。責任あるエンジニア。
他のすべてのユースケースシナリオの99.5%では、アプリ開発者からWebを隠そうとするのをやめました。なぜなら、実際にWebアプリを作成したい場合は、実際にWebのしくみを学ぶほうが得策だからです。シッククライアントソリューションとシンクライアントソリューションの皮肉なのは、必然的にシンクライアントアプローチはフロントエンドのがらくたを膨らませ、パフォーマンスが低下することです。さらに重要なことは、これらのソリューションは常に、何をしているのかを実際に知っていて、有効なフレームワークに制約されたくない人々にとっては、すべての地獄のように柔軟性を欠いてきました。
CSS、JavaScript、HTML、XHRについてすべてを知っている誰かを取り上げ、フレームワークを使用してあらゆる段階でロードブロッキングすることによってそれらを完全に役に立たなくすることほど、それほど無意味なものはありません...
ヘッドタグ内のすべての「不要な」スクリプトタグをクリアして、スクリプトの依存関係を台無しにしないようにします。 ( 'スクリプトマネージャー'に処理を任せる方が良いです)確かに、今日何をしているのかわかっていて、それがめちゃくちゃになっているのなら、誰もそのようなことはしません。
すべてのHTMLを1つの巨大なフォームタグでラップすると主張します。 HTMLではフォーム内のフォームは許可されていないため、Webフォームを実行するか、まったく実行しません。
ブラウザーと対話してサーバーにメッセージを送信し、サーバーが応答したときに反応することにより、UIイベントに反応するために実際に煮詰めるべきものの18ステップの「ライフサイクル」のように作成します。巨大なゴミの山でそのプロセスを抽象化することは決して必要ではありませんでした(そして、公平を期すために、これを試みたのはMSだけではありません)。
実際に、Webフォーム以外の問題の解決策を使用する際に発生する可能性のあるすべてのことを行います。例:私がより若いクライアント側の開発者であったとき、私は丸一日かけて、ページの上部にある送信ボタンをページの下部にある送信ボタンをトリガーする方法を見つけることに費やしました(私はその1つの巨大な形のもの)。通常、これには5分かかりますが、かなりの数時間後、WebフォームJavaScriptに責任のあるリバースエンジニアリングを行った後、それらがとりわけ、最後のフォーム要素に何を持っているかを知らないプロパティを設定していたことがわかりました。フォーカスは、送信ボタンがクリックされたときに、公式のMicrosoft Submit(tm)ハンドラのアクティブ化に関して、公式のMicrosoft Submit(tm)ボタンのみが機能するようにすることでした。
だから、ロールスロイス対トヨタはまったく無理です。もっと言うと、あなたがMicrosoft以外の誰かからガスまたはオイルを購入したことが検出されたときに自動的に鋭角な90度回転を行うオンボードシステムを搭載したMicrosoftが設計したPintoに対して多すぎる金額を支払う、完全に合理的な現代叩き込むのに便利な壁。 Webについて何も知らず、Microsoftに一生忠誠を誓う自殺願望のあるブランドに忠実なドライバーにとって理想的な車です。
すべての.NET MVCは、本当にシンプルで合理的であり、独自のレイヤーを再発明してWebの上に平手打ちすることはありません。それはあなたのためにいくつかのボイラープレートをノックアウトするのを助けるためにそこにあるものと連携するだけです。より良い/より安い/より自由なフレームワークが利用可能ですが、.NETの事柄にすでに固執している場合は、はるかに悪いことになる可能性があります。
しかし、真剣に、!@#$をウェブフォームから遠ざけてください。もうほとんど死んでいる。手放す。クライアントが実際に何か新しいことや別のことをしたいとき、またはMSでさえできなかったためにがらくたが始まったときの排他的で有利な時間別サポート契約を約束している場合は、3倍のお金でそれを行うことをクライアントに伝えます10,000行のajax.jsファイルのその巨大なものに続けて追加することに煩わされることはありませんDLLお尻が触れられない場所からお尻を引き出します。
ASP.NET MVCソリューションは、WebFormsソリューションよりも複雑である必要はありません。個人的には、ASP.NET MVCは実際にはWebFormsよりもはるかに単純であり、本質的にはよりクリーンであるように見えます。
私の経験から、多くのMVCフレームワーク(ASP.NET、Rails、CodeIgniterなど)には、同じコア機能と規則の多くが備わっています。 WebFormsは、実際にはWebの観点からは奇妙なカモです。私の推測では、ほとんどのWebプログラマーはWebFormsよりもASP.NET MVCを選択する方がはるかに高速です。
ASP.NET WebForms上でASP.NET MVCを使用する最大の理由は、テスト容易性です。確かにWebFormsの一種の単体テストを行うことができますが、これにはモックフレームワークと多くの苦痛が必要です。 2番目の理由は、MVCが問題を分離するために少し簡単にしていることです。これにより、コードを大幅に再利用し、コードを疎結合にすることができます。これは、MVPのようなパターンを使用してASP.NETで同じことを実行することが不可能であることを意味しません。
MVCの欠点は、多くの機能が失われることと、過去10年間(ほぼ)Webフォームに組み込まれていることです。 MVCは、同様の機能を提供するために設立されて以来、長い道のりを歩んできました。
パフォーマンスに関して、誰かが何らかの方法で「より高速」であるという証拠はありますか?
私は一方が他方より優れているとは思いません。私はMVCフレームワークが本当に好きで、それを使用して大きな成功を収めてきましたが、常にプロジェクトに一致する技術を選択するようにしています。