モデル-ビュー-コントローラー

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
MVCパターン内の相互作用の図

Model-view-controllerMVC)は、関連するプログラムロジックを3つの相互接続された要素に分割するユーザーインターフェイスの開発に一般的に使用されるソフトウェアデザインパターン[1]です。これは、情報の内部表現を、情報がユーザーに提示され、ユーザーから受け入れられる方法から分離するために行われます。[2] [3]

従来、デスクトップのグラフィカルユーザーインターフェイス(GUI)に使用されていたこのパターンは、Webアプリケーションの設計に広く使用されるようになりました[4]人気のあるプログラミング言語には、パターンの実装を容易にするMVCフレームワークがあります。

歴史

グラフィカルユーザーインターフェイスの初期の開発における重要な洞察の1つである、MVCは、責任の観点からソフトウェア構造を記述および実装する最初のアプローチの1つになりました[5]

Trygve Reenskaugは、1970年代にXerox Palo Alto Research Center(PARC)[6] [7]を訪問しているときに、 MVCをSmalltalk -79に導入しました。1980年代に、Jim Althoffらは、Smalltalk-80クラスライブラリ用のMVCのバージョンを実装しました。その後、 The Journal of Object Technology (JOT)の1988年の記事で、MVCが一般的な概念として表現されました。[8]

その後、MVCパターンが進化し[9] 、階層モデル-ビュー-コントローラー(HMVC)、モデル-ビュー-アダプター(MVA)、モデル-ビュー-プレゼンター(MVP)、モデル-ビュー-ビューモデル(MVVM )などのバリエーションが生まれました。 )、およびMVCをさまざまなコンテキストに適合させたその他のもの。

WebアプリケーションでのMVCパターンの使用は、1996年にNeXTWebObjectsが導入された後、成長しました。これは、もともとObjective-C(Smalltalkから多額の借用)で記述され、MVCの原則を実施するのに役立ちました。その後、WebObjectsがJavaに移植されたときに、MVCパターンがJava開発者に人気を博しましたSpring(2002年10月にリリース)などのJavaのその後のフレームワークは、 JavaとMVCの間の強力な結合を継続しました。フレームワークDjango(2005年7月、Pythonの場合)およびRails(2005年12月、Rubyの場合)の導入)は、どちらも迅速な展開に重点を置いており、MVCが長い間人気を博していた従来のエンタープライズ環境の外でMVCの人気を高めました。

コンポーネント

モデル
パターンの中心的なコンポーネント。これは、ユーザーインターフェイスに依存しない、アプリケーションの動的なデータ構造です。[10]アプリケーションのデータ、ロジック、およびルールを直接管理します。
意見
チャート、図、表などの情報の表現。管理用の棒グラフや会計士用の表形式のビューなど、同じ情報の複数のビューが可能です。
コントローラ
入力を受け入れ、それをモデルまたはビューのコマンドに変換します。[11]

アプリケーションをこれらのコンポーネントに分割することに加えて、モデル-ビュー-コントローラーの設計は、それらの間の相互作用を定義します。[12]

  • モデルは、アプリケーションのデータを管理する責任があります。コントローラからユーザー入力を受け取ります。
  • ビューは、モデルのプレゼンテーションを特定の形式でレンダリングします。
  • コントローラはユーザー入力に応答し、データモデルオブジェクトに対して相互作用を実行します。コントローラは入力を受け取り、オプションでそれを検証してから、入力をモデルに渡します。

他のソフトウェアパターンと同様に、MVCは、問題に対する「ソリューションのコア」を表現すると同時に、システムごとに問題を適応させることができます。[13]特定のMVC設計は、ここでの従来の説明とは大幅に異なる場合があります。[14]

モチベーション

Alan Kayが2003年に書いたように、MVCの背後にある元々の動機は、任意のオブジェクトのグラフィカルインターフェイスの作成を可能にすることでした。[15]それは「裸の物体」と呼ばれるリチャード・ポーソンの本で詳細に概説されました[15]

Webアプリケーションでの使用

もともとはデスクトップコンピューティング用に開発されましたが、MVCは主要なプログラミング言語のワールドワイドウェブアプリケーションの設計として広く採用されていますパターンを適用するいくつかのWebフレームワークが作成されています。これらのソフトウェアフレームワークは、主にMVCの責任がクライアントとサーバーの間で分割される方法で、解釈が異なります[16]

一部のWebMVCフレームワークは、モデル、ビュー、およびコントローラーロジックのほぼ全体をサーバーに配置するシンクライアントアプローチを採用しています。このアプローチでは、クライアントはハイパーリンク要求またはフォーム送信のいずれかをコントローラーに送信し、ビューから完全で更新されたWebページ(または他のドキュメント)を受信します。モデルは完全にサーバー上に存在します。[16]

も参照してください

参考文献

  1. ^ 「ボブマーチンおじさんによるクリーンアーキテクチャの原則」YouTube
  2. ^ Reenskaug、Trygve; Coplien、James O.(2009年3月20日)。「DCIアーキテクチャ:オブジェクト指向プログラミングの新しいビジョン」Artima開発者2009年3月23日にオリジナル(html)からアーカイブされました2019年8月3日取得より深く、フレームワークは、情報の表現をユーザーの相互作用から分離するために存在します。
  3. ^ Burbeck(1992):「...ユーザー入力、外界のモデリング、およびユーザーへの視覚的フィードバックは、3つのタイプのオブジェクトによって明示的に分離され、処理されます。」
  4. ^ デイビス、イアン。「MVCの利点は何ですか?」インターネット錬金術2016年11月29日取得
  5. ^ Model–View–ControllerHistoryC2.com(2012-05-11)。2013年12月9日に取得。
  6. ^ MVCの発明者であるTrygveReenskaugからのメモと歴史的文書。
  7. ^ 「DynaBook要件に関する注記」、Trygve Reenskaug、1979年3月22日、 SysReq.pdf
  8. ^ クラスナー、グレンE。; 教皇、スティーブンT.(1988年8月〜9月)。「Smalltalk-80でモデルビューコントローラーのユーザーインターフェイスパラダイムを使用するためのクックブック」ジャーナルオブオブジェクトテクノロジーSIGS出版物。1(3):26–49。「 Smalltalk-80システムのモデル-ビュー-コントローラーユーザーインターフェイスパラダイムの説明」(レポート)、ParcPlaceSystemsとしても公開されています。2012年6月5日取得。
  9. ^ MartinFowlerによるMVCおよびその他のUIアーキテクチャの進化
  10. ^ Burbeck、Steve(1992) Smalltalkでのアプリケーションプログラミング-80:Model–View–Controller(MVC)の使用方法
  11. ^ 抽象化のためのMVC(Model–View–Controller)アーキテクチャパターンの簡単な例
  12. ^ ブッシュマン、フランク(1996)パターン指向のソフトウェアアーキテクチャ
  13. ^ ガンマ、エーリヒ他。(1994)デザインパターン
  14. ^ Moore、Dana etal。(2007)プロフェッショナルリッチインターネットアプリケーション:Ajax and Beyond:「MVCの起源以来、パターンの多くの解釈がありました。この概念は、さまざまなシステムやアーキテクチャに非常に異なる方法で適応および適用されてきました。」
  15. ^ a b Alan Kay(2003年5月23日)。「きしむ音は本当にオブジェクト指向ですか?」SqueakFoundationメーリングリスト2021年10月26日取得
  16. ^ a b Leff、Avraham; Rayfield、James T.(2001年9月)。モデル/ビュー/コントローラーデザインパターンを使用したWebアプリケーション開発IEEEエンタープライズ分散オブジェクトコンピューティング会議。pp。118–127。

参考文献