私の意見では、純粋なものと不純なものの2種類のMVCがあります(より良い単語がないためです)。
純粋なMVCは、スモールトークに導入されたものです。
これは、パーソナルコンピューティング/デスクトップアプリケーション向けです。ご覧のとおり、モデルはビューに対して行われた更新/変更を通知します。(不純な)MVCではそうではありません。
Webアプリケーション向けに宣伝されているもう1つの(不純な)MVC は、上記の古典的なMVCではなく、PAC(Presentation-abstraction-control)パターンです。それは、より多くのコード編成と懸念の分離です。
- モデル:保存データの抽象化
- コントロール:通常、ビジネスロジック層と呼ばれるもの、および対応するビジネスロジック(別名コントローラー)へのHTTPリクエストのルーティングを担当するアプリケーションの一部
- 表示:モデルからのデータをフォーマットしてクライアントに返すテンプレートを主に表示します。モデルがビューに更新を送信することはありません。また、モデルからの更新をビューがサブスクライブすることもありません。それは悪夢と結びついているでしょう。したがって、真のMVCよりもPACに似ています。
ここで、Webアプリケーションの通常の構造を次に示します。
- フロントエンド:Backbone.jsなどのフレームワークを使用するクライアント上のMVC。これは本質的に「真の」MVCフォームです。
- バックエンド:繰り返しますが、コードの編成と懸念の分離のための(不純な)MVC / PACがあります
- グローバルWebアプリ(Webアプリケーション全体):JSONデータのみを返すRESTfulバックエンドがある場合、バックエンド全体が、ViewとControllerが本質的に存在するフロントエンドクライアントアプリケーションのモデルとして認識されます。
それでは、MVCの欠点は何ですか?まあ、パターンは時の試練に耐えてきたので、少し「複雑」であること以外はそれほど重要なものは多くありません。ご覧のとおり、MVCは複合パターンです-戦略/オブザーバーパターンを実装し、すべてが高度なパターンを形成するように配置されています。
どこでも使用すべきですか?そうでないかもしれない。非常に複雑なWebアプリケーションは、複数のレイヤーに分割される可能性があります!ビュー/ビジネスロジック/データレイヤーだけでは済まない場合があります。包括的なフレームワーク/組織は、依然としてMVCに似ていますが、巨視的なレベルに限られます。
以下は、MVCだけが悪い選択の例です。大銀行向けに航空交通管制システムまたはローン/住宅ローン処理アプリケーションを設計してみてください。MVCだけが悪い選択です。必然的に、イベントバス/メッセージキューと、個々のレイヤー内にMVCを備えたマルチレイヤーアーキテクチャと、コードベースをより適切に整理するための包括的なMVC / PAC設計が必要になります。