率直に言って、技術リーダーは間違っています。
これまで真のMVCフレームワークを使用したことがない人には、「MVC」はWebフォームの単なる異なるフレーバーであるという一般的な誤解がありますが、実際には、真実から遠く離れることはできません。
これが当てはまる理由を理解するには、アーキテクチャパターンであるMVCと、 MVCパターンを実装するMicrosoftによって構築されたフレームワークであるASP.NETMVCの違いを理解する必要があります。
多くの場合、このトピックを完全に理解していない技術リーダーやアーキテクトなどの人々は、「MVC」という用語を使用して、パターンとフレームワークの違いを理解せずにパターンとフレームワークの両方を説明します。これはしばしば混乱を招きます。
したがって、明確にするために、MVCパターンは新しいものではなく、実際には次のような多くのフレームワークによって実装されています。
Webformsは、MVCパターンをすぐに実装するフレームワークの1つではありません。
これで、 WebFormsにMVCパターンを実装できることは事実ですが、WebformsはMVPスタイルのパターンを実装するのに適しています。実際、この点で役立つフレームワーク(このような)があります。
ただし、技術リーダーが何について話しているのかわからないことを示す最大の指標は次のとおりです。
私の技術リーダーは割り込むことにしました。上記のプロジェクト(階層型、Webフォーム)はMVCと同じであると教えてください
アプリケーションに「層」を導入することは、MVCとは何の関係もありません。実際、階層型アーキテクチャ内では、MVCアプリケーションは完全にプレゼンテーション層内にあり、他のアプリケーション層とは何の関係もありません。
フロントエンドにASP.NETMVCを使用するということは、ASP.NETMVCフレームワークを使用して実装されたロジックレイヤーの上にプレゼンテーション層があることを意味します。MVCを使用しているという理由だけで、他の層の必要性が突然なくなったという意味ではありません。
逆に、Webformsは、階層型アーキテクチャ内の単なるプレゼンテーション層です。階層型アーキテクチャを使用しているからといって、MVCパターンを使用していることを意味するわけではありません。
他の各ポイントへ:
ビューは単なるASPXページ
ですこれは真実ではありません。ASPXページは非常に複雑な獣であり、MVCビュー間に非常に大きな違いが1つあります。
それらは状態を維持するように設計されています
ページライフサイクルとビューステートのこのシステム全体と、ポストバック間の状態を維持するように設計されたコントロールがあります。
ASP.NET MVCはステートレスになるように設計されているため、ビューにはそのような複雑さは含まれていません。
コントローラーはページの後ろにあります
このステートメントは、コントローラーの要点を完全に見逃しています。
コードビハインドは、ASPXページのレンダリングプロセスに関係するすべてのものを明示的に認識しています。これは、ページのコントロール、ページの状態、ページのライフサイクルを認識しており、ビューと非常に緊密に結合されています。
コードビハインドも1つだけを返します。aspxページ。
コントローラははるかに柔軟性があり、ビューを返すだけでなく、データのさまざまな表現をレンダリングするためのロジックを制御するために使用できます。たとえば、同じデータを標準のhttpリクエストの場合はHTMLとしてレンダリングしたり、AJAXリクエストの場合はJSONとしてレンダリングしたりできます。
これが可能なのは、コントローラーロジックとビューロジックが緩く結合されているためです。
モデルは単なるデータオブジェクトです
これは間違っています。データオブジェクトをビューに直接バインドすることは、あらゆる種類の複雑さを持つあらゆる種類のMVCアプリケーションではまれです。簡単に言えば、データベースでデータをモデル化する方法が、ビューの表示に必要なデータを表すことはめったにありません。
たとえば、「TitleId」を持つ従業員レコードがあるとします。レコード内のデータは単なるintですが、意味をなすためには、実際のテキスト値をユーザーに表示する必要があります。
したがって、ほとんどのMVCアプリケーションでは、「モデル」は実際には「ViewModel」としてより正確に記述され、データまたはドメインモデルから完全に分離されています。
要約すると
あなたの技術リーダーは間違っており、セマンティックレベルだけでなく、「あなたが話していることについてのアイデアがない」レベルでも間違っています。
- Webフォームで階層型アーキテクチャを使用することは、MVCパターンを実装したことを意味するわけではありません。
- ASPXページはビューのようなものではありません
- コードビハインドはコントローラーのようなものではありません
- モデルはデータオブジェクトとは何の関係もありません。
お役に立てば幸いです。