楽水

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

アプリケーション デザインパターン

MVC vs MVC2

投稿日:


ここでは、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の違いを解説しました。

-アプリケーション, デザインパターン
-,

執筆者:

関連記事

デザインパターンとは

デザインパターンとは、ソフトウェア設計者(アーキテクト)が、過去に編み出した設計ノウハウを蓄積し、名前をつけて、再利用しやすいようにカタログ化したものです。 デザインパターンといえばオブジェクト指向に …

アプリケーションポートフォリオの設計

アプリケーションポートフォリオとは、企業のアプリケーションタイプの構成です。 アプリケーションは、情報資産の一つで、アプリケーションタイプは、アプリケーションの型を表します。 ここでは、アプリケーショ …

スクラムとは

今回は、スクラムについて次の観点で説明します。 スクラムとは スクラムを支える3つの柱 スクラムの構成要素 スクラムの役割 スクラムのイベント スクラムの成果物 スクラムの5つの価値基準 スクラムとは …

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

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

開発手法の変遷とドメイン駆動設計×マイクロサービス

ここでは、何を中心概念としてシステムを開発するかという観点から、これまで開発手法がどのように移り変わってきたのかを順に説明します。 プロセス中心アプローチ(POA) データ中心アプローチ(DOA) オ …