質問

StackOverflow について初めて聞いたとき、そしてそれが ASP.Net MVC で構築されていると聞いたとき、私は少し混乱しました。ASP.Net は常に MVC アーキテクチャの一例だと思っていました。ビューを提供する .aspx ページ、コントローラーを提供する .aspx.vb ページがあり、モデルとなる別のクラスを作成できます。ASP.Net で MVC を使用するプロセスについては、こちらで説明されています。 マイクロソフトの記事.

そこで私の質問です。ASP.Net MVC は、通常の ASP.Net (ASP.Net 1.1 まで遡っても) では実行できない機能を提供しますか?それはただの派手な URL ですか?MSがRuby On Railsのような新技術と自社を比較して、「私たちにもできる」と言えるのは、ただの自慢のためなのでしょうか?「ファイル」->「新規」メニューにいくつかの追加のテンプレートではなく、ASP.Net MVC が実際に提供するものはありますか?

おそらく今は本当に懐疑的で否定的に聞こえると思うので、やめておきます。しかし、私は ASP.Net MVC が実際に何を提供するのかを知りたいと思っています。また、上から下に行くか、その逆に行くかに応じて、View-Controller-Model または Model-Control-View のレイヤーの順序ではなく、Model-View-Controller である理由を誰かが教えてくれたら、それも本当に感謝しています。

編集

また、私は Web フォーム (別名サーバー コントロール) モデルにもあまり興味がなかったということも指摘しておく価値があるでしょう。最小限しか使用しておらず、仕事では一度も使用していません。

役に立ちましたか?

解決

.aspx は、aspx ページ (「ビュー」) が背後のコード (「コントローラー」) より前に呼び出されるため、MVC パターンを満たしていません。

これは、コントローラーがビューに対して「強い依存関係」を持っていることを意味し、MVC の原則に大きく反します。

MVC の主な利点の 1 つは、実際のビューをインスタンス化せずにコントローラー (多くのロジックを含む) をテストできることです。.aspx の世界ではこれを行うことはできません。

コントローラーを単独でテストする方が、asp.net パイプライン全体 (アプリケーション、要求、応答、ビュー ステート、セッション ステートなど) をインスタンス化するよりもはるかに高速です。

他のヒント

スコット・ガスリーはこの投稿でそれを説明しました。ASP.NET MVC フレームワーク"

  • デフォルトでは、懸念、テスト可能性、TDDのきれいな分離が可能になります。MVCフレームワーク内のすべてのコア契約は、インターフェイスベースで簡単にモック可能です(インターフェイスベースのIHTTPREQUEST/IHTTPRESPONSE Intrinsicsが含まれます)。ASP.NETプロセス内でコントローラーを実行することなく、アプリケーションをユニットテストできます(ユニットテストを速くする)。このテスト(Nunit、Mbunit、MSテストなどを含む)をやるべき単位テストフレームワークを使用できます。

  • 拡張性が高く、プラグイン可能です。MVCフレームワークのすべてが設計されているため、簡単に交換/カスタマイズできるようになります(たとえば、:オプションで、独自のビューエンジン、ルーティングポリシー、パラメーターシリアル化などをプラグインできます。また、既存の依存関係注射およびIOCコンテナモデル(Windsor、Spring.Net、Nhibernateなど)の使用もサポートします。

  • クリーンURLを使用してアプリケーションを構築できる非常に強力なURLマッピングコンポーネントが含まれています。URLには内部に拡張機能がある必要はなく、SEOやレストに優しい命名パターンを簡単にサポートするように設計されています。たとえば、/products/edit/4 URLを上記のプロジェクトのProductsControllerクラスの「編集」アクションに簡単にマッピングするか、/blogs/scottgu/10-10-2007/sometopic/urlにマッピングできます。 DisplayPost "BlogEngineControllerクラスのアクション。

  • MVCフレームワークは、既存のasp.net .aspx、.ascx、および.masterマークアップファイルを「ビューテンプレート」として使用することをサポートします(つまり、ネストされたマスターページ、<%=%>スニペットなどの既存のASP.NET機能を簡単に使用できます。サーバーコントロール、テンプレート、データバインディング、ローカリゼーションなど)。ただし、サーバーへの相互作用には既存のポストバックモデルを使用しません。代わりに、すべてのエンドユーザーインタラクションを代わりにコントローラークラスにルーティングします。これは、懸念とテスト責任のきれいな分離を確保するのに役立ちます(MVCベースのビューを使用したViewStateまたはページライフサイクルもありません)。

  • ASP.NET MVCフレームワークは、フォーム/Windows認証、URL認証、メンバーシップ/ロール、出力およびデータキャッシュ、セッション/プロファイル状態管理、健康監視、構成システム、プロバイダーアーキテクチャなどなど、既存のASP.NET機能を完全にサポートしています。

主に、明確に定義された責任の分離を持つテスト可能な Web サイトを作成することが非常に簡単になります。また、新しい MVC フレームワークを使用すると、有効な XHTML UI を作成するのもはるかに簡単になります。

私は Web サイトでの作業を開始するために 2 番目の CTP (現在は 5 つだと思います) を使用しました。これまでにいくつかの Web アプリケーションを作成したことがありますが、サーバー コントロール モデルを使用するよりも何百倍も優れていると言わざるを得ません。

自分が何をしているのか分からない場合でも、サーバー制御は問題ありません。Web アプリケーションがどのように機能すべきかを学び始めると、Web アプリケーションとの戦いが始まります。最終的には、現在のコントロールの欠点を克服するために独自のコントロールを作成する必要があります。この時点で MVC が輝き始めます。そして、それはあなたのウェブサイトのテスト可能性さえ考慮していません...

ASP.net Web フォーム開発者に ASP.net MVC を説明することを目的とした Dino Esposito による素晴らしい記事:

http://dotnetslackers.com/articles/aspnet/AnArchitecturalViewOfTheASPNETMVCFramework.aspx

自動生成された HTML ID はもう必要ありません。何らかの種類の JavaScript を使用している人なら誰でも、この事実を理解できます。

コードビハインドを備えた ASP.Net は次のとおりです。 ほとんど MVC ではありますが、MVC をそうではない最大の特徴は、分離コードが MVC の大きなコンポーネントである aspx に直接結び付けられていることです。コードビハインドをコントローラーとして考えている場合は、ビューから完全に分離する必要があります。新しい .NET MVC はこれを完成させ、完全な MVC フレームワークを提供します。ただし、.NET 用の既存のものはすでに存在します (Spring.NET を参照)。

次のようないくつかの簡単な例を調べました。 これです. 。違いがなんとなくわかります。ただし、MVC がコントローラーからビューをどのように分離するのかはよくわかりません。ビューは引き続きコントローラー内の内容を参照します。これによりテストが非常に簡単になること、そして少なくとも MVC ではコントローラーがビューについての知識を持たないことがわかります。また、コントローラー内のメソッドを呼び出すためにビューを処理する必要もありません。一見すると大したことではないように見えますが、これはかなりの飛躍であることがわかります。

サーバーコントロールとの戦いについては @Will に同意します。私はそれらが実際に使用される状況で働いたことはありませんが、経験のある私の知り合いの多くは、それらの使用でかなりの制限に遭遇しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top