楽水

人々の創造が自由に表現できる舞台づくり

デザインパターン

MVC vs MVC2

投稿日:2020年12月19日 更新日:


ここでは、MVCとMVC2の根本的な違いを知りたいという方を対象に、
MVCとMVC2の違いについて以下の観点で解説します。

  • MVCとは何か
  • MVC2とは何か
  • MVC vs MVC2

MVCについて詳しく知りたいかたは、
MVCとは【本来の仕組を詳しく解説】
を参照ください。

MVCとは何か

MVCとはModel View Controllerの略で、ユーザーインターフェースを持つアプリケーションを実装するときのアーキテクチャパターンで、以下のような構造になります。

また、MVCの基本的な流れは次のようになります。

  1. ユーザーの入力をControllerが受ける。
  2. ControllerはModelを処理する。その際、必要に応じてModelのデータが更新される。
  3. Modelのデータが更新された場合、ModelはViewにそれを通知する。
  4. Viewは、Modelからの通知を受けて、Modelからデータを取得し、表示内容を更新後、ユーザーに出力する。

MVCは、1979年、ゼロックス・パロアルト研究所のトリグヴェ・リーンスカウクによって、SmallTalk-80でWindowsアプリケーションを開発のための設計指針として考案されたもので、以下の3つのデザインパターンの組み合わせから成っています。

  • Observerパターン
  • Compositeパターン
  • Strategyパターン

なので、MVCのメリットは、一つのソフトウェアを
アプリケーション本来の処理(Model)
画面の表現(View)
ユーザーの入力処理(Controller)
に分けることによって次のようなメリットを得ることができると言えます。

  • Observerパターンを適用することで、Modelオブジェクトが状態を変えたとき、それに依存するすべてのViewオブジェクトに自動的にそのことが知らされ、それらをリアクティブに更新することができる(リアクティブプログラミング)
  • Compositeパターンを適用することで、単一のViewと複合的なViewを一様に扱うことができる
  • Strategyパターンを適用することで、各Viewに応じた入力処理をControllerにカプセル化し、必要に応じて選択できるようにできる

なお、ソフトウェア設計の考え方やデザインパターンについて知りたい方は、「オブジェクト指向における再利用のためのデザインパターン」という書籍が有名ですのでお勧めします。

さて、MVCが生まれたのは1979年ですので、当時のMVCは、Windowsアプリケーションのようなスタンドアローンで動くアプリケーションを想定して考えられています。
なので、Modelオブジェクト、Viewオブジェクト、Controllerオブジェクトを比較的自由に結合することができるアーキテクチャになっています。
しかし、今日のように、クライアントサーバー型のアプリケーション、なかでもWebアプリケーションのようにMVC間にネットワークが介入する場合、それによる制約があり、本来のMVCをそのまま適用することが困難になってきました。
そこで、MVCから派生したMVC2やMVVMなどのアプリケーションアーキテクチャが登場してきたのです。

MVC2とは何か

MVC2とはMVCの派生で、主に、Webアプリケーションを開発するときに適用されるアーキテクチャパターンです。
現在、プログラマーがWebアプリケーションを開発するときは、JavaのJavaEE、RubyのRuby on Railsなど、アプリケーションフレームワークをベースに開発するのが通常です。
このアプリケーションフレームワークにはMVC2が組み込まれているので、プログラマーが自らMVCのデザインパターンを適用してアプリケーションを開発する必要性はありません。
さて、MVC2の構造は以下のようになります。

また、MVC2の基本的な流れは以下のようになります。

  1. ユーザーの入力をControllerが受ける。
  2. ControllerはModelを処理する。その際、必要に応じてModelのデータが更新される。
  3. Modelのデータが更新された場合、ControllerはViewにそれを通知する。
  4. Viewは、Modelからの通知を受けて、Modelからデータを取得し、表示内容を更新後、ユーザーに出力する。

この流れの中で、入力の部分がHTTPリクエスト、出力の部分がHTTPレスポンスになります。

MVC vs MVC2

それでは、MVCとMVC2を比較してみましょう。
まず、MVCの構造とMVC2の構造を比較すると、MVC2にはデザインパターンが適用されていないことがわかります。
なので、Model、View、Controller間の関係を見ると、MVC2のほうが疎結合になっています。
次に、MVCとMVC2の基本的な流れを比較してみましょう。
すると、MVCの場合、Modelのデータの更新をModel自体がViewに通知するのに対して、MVC2の場合、ControllerがViewに通知していることがわかります。
このように、MVCに比べMVC2の方がControllerの役割が多くなり、Controllerがファットになりやすいことがわかります。
以上、今回は、MVCとMVC2の違いを解説しました。

-デザインパターン
-,

執筆者:

関連記事

ソフトウェアの設計原則②コマンド・クエリ分離の原則(CQS)

ソフトウェアの設計原則①:SOLIDの原則という記事で、変化に強いソフトウェアの代表的な特徴として以下をあげ、それを実現する、ソフトウェアの設計原則の一つ、SOLIDについて解説しました。 保守性が高 …

ソフトウェアの設計原則③GRASP

ソフトウェアの設計原則①:SOLIDの原則という記事で、変化に強いソフトウェアの代表的な特徴 保守性が高いこと 修正箇所が局所化され、他の部分に影響しないこと(リスクの局所化)。 再利用性が高いこと …

ソフトウェアの設計原則①SOLIDの原則

昨今の特徴を端的に表すと 個の時代 組織から個人へ。 心の時代 「もの」から「こと」へ。 ということになるのではないでしょうか。 激しく変化する多様な嗜好に合わせて、 ビジネスの変化が加速化 ビジネス …

オブジェクトの性質【同一性、等価性、不変性、参照透過性】

ここでは、オブジェクトの性質について、以下の観点で解説します。 同一性 等価性 不変性 参照透過性 同一性と等価性 同一性と不変性 不変性と参照透過性 参照オブジェクトと値オブジェクト 参照型と値型 …

MVC vs MVVM

ここでは、MVCとMVC2の違いについて以下の観点で解説します。 MVCとは何か MVVMとは何か MVC vs MVVM MVCについて詳しく知りたいかたは、 MVCとは【本来の仕組を詳しく解説】 …