<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wikippe.e-do-match.com/index.php?action=history&amp;feed=atom&amp;title=Model_View_Controller</id>
	<title>Model View Controller - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wikippe.e-do-match.com/index.php?action=history&amp;feed=atom&amp;title=Model_View_Controller"/>
	<link rel="alternate" type="text/html" href="https://wikippe.e-do-match.com/index.php?title=Model_View_Controller&amp;action=history"/>
	<updated>2026-08-11T12:55:46Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wikippe.e-do-match.com/index.php?title=Model_View_Controller&amp;diff=82105&amp;oldid=prev</id>
		<title>219.118.163.49: /* Webアプリを連想させる不適切な例えを削除（WebならばHTTP部分の位置づけに関する説明が必要なはず） */</title>
		<link rel="alternate" type="text/html" href="https://wikippe.e-do-match.com/index.php?title=Model_View_Controller&amp;diff=82105&amp;oldid=prev"/>
		<updated>2014-03-18T04:26:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Webアプリを連想させる不適切な例えを削除（WebならばHTTP部分の位置づけに関する説明が必要なはず）&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[File:MVC-Process.svg|right|200px|thumb| MVCの典型的な相関図]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;MVC&amp;#039;&amp;#039;&amp;#039;（&amp;#039;&amp;#039;&amp;#039;Model View Controller&amp;#039;&amp;#039;&amp;#039; モデル・ビュー・コントローラ）は、[[ユーザーインターフェイス|ユーザーインタフェース]]をもつ[[アプリケーションソフトウェア]]を実装するための[[デザインパターン (ソフトウェア)|デザインパターン]]である。&lt;br /&gt;
&lt;br /&gt;
アプリケーションソフトウェアの&amp;#039;&amp;#039;&amp;#039;内部データ&amp;#039;&amp;#039;&amp;#039;を、ユーザーが直接参照・編集する情報から分離する。そのためにアプリケーションソフトウェアを以下の3つの部分に分割する。&lt;br /&gt;
&lt;br /&gt;
# model: アプリケーションデータ、ビジネスルール、ロジック、関数&lt;br /&gt;
# view: グラフや図などの任意の情報表現&lt;br /&gt;
# controller: 入力を受け取りmodelとviewへの命令に変換する&lt;br /&gt;
&lt;br /&gt;
== MVCの歴史 ==&lt;br /&gt;
&lt;br /&gt;
* 1979年: [[パロアルト研究所]]にてTrygve Reenskaugが考案。&amp;lt;ref&amp;gt;[http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html MVC XEROX PARC 1978-79]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://heim.ifi.uio.no/~trygver/2003/javazone-jaoo/MVC_pattern.pdf The Model-View-Controller (MVC) Its Past and Present]&amp;lt;/ref&amp;gt;長い間、Smalltalk-80の実装のみが公開され、MVCに関する公開情報はなかった&lt;br /&gt;
* 1988年: 最初の論文「A Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk -80」&amp;lt;ref&amp;gt;[http://www.ics.uci.edu/~redmiles/ics227-SQ04/papers/KrasnerPope88.pdf A Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk -80]&amp;lt;/ref&amp;gt;が公開&amp;lt;ref&amp;gt;[http://c2.com/cgi/wiki?ModelViewControllerHistory Model View Controller History]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 1994年: 書籍「Design Patterns:Elements of Reusable Object-Oriented Software」&amp;lt;ref&amp;gt;{{cite book | author=The &amp;quot;Gang of Four&amp;quot;:&lt;br /&gt;
Erich Gamma,&lt;br /&gt;
Richard Helm,&lt;br /&gt;
Ralph Johnson,&lt;br /&gt;
John Vlissides | title=Design Patterns:&lt;br /&gt;
Elements of Reusable Object-Oriented Software | publisher=Addison-Wesley | year=1994 | id=ISBN 0-201-63361-2}}&amp;lt;/ref&amp;gt;内で取り上げられる&lt;br /&gt;
* 1999年: MVCのサーバサイド実装として&amp;#039;&amp;#039;&amp;#039;JavaServer Pages Model 2&amp;#039;&amp;#039;&amp;#039;が発表&amp;lt;ref&amp;gt;[http://www.javaworld.com/article/2076557/java-web-development/understanding-javaserver-pages-model-2-architecture.html Understanding JavaServer Pages Model 2 architecture] &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
元来[[Smalltalk]]におけるウィンドウプログラム開発のための設計指針として生まれたが、構造が複雑となりがちな[[グラフィカルユーザインターフェース]] (GUI) をもつソフトウェアにおける有用性から他方面へ広がった。&lt;br /&gt;
&lt;br /&gt;
== MVCの構造 ==&lt;br /&gt;
[[File:ModelViewControllerDiagram2.svg|thumb|350px|Model-View-Controller 概念的な構成図。&amp;lt;/br&amp;gt; 直線は直接的なAssociationを表し、破線は (例えば)[[Observer パターン]]を経た間接的なAssociationを表す。]]&lt;br /&gt;
&lt;br /&gt;
MVCでは、プログラムを3つの要素、&amp;#039;&amp;#039;&amp;#039;Model&amp;#039;&amp;#039;&amp;#039;（モデル）、&amp;#039;&amp;#039;&amp;#039;View&amp;#039;&amp;#039;&amp;#039;（ビュー）、&amp;#039;&amp;#039;&amp;#039;Controller&amp;#039;&amp;#039;&amp;#039;（コントローラ）に分割する。&lt;br /&gt;
&lt;br /&gt;
; Model&lt;br /&gt;
:そのアプリケーションが扱う領域のデータと手続き（[[ビジネスロジック]] - ショッピングの合計額や送料を計算するなど）を表現する要素である。また、データの変更をviewに通知するのもmodelの責任である（modelの変更を通知するのに[[Observer パターン]]が用いられることもある）。&lt;br /&gt;
:多くのアプリケーションではデータの格納に永続的な記憶の仕組み（[[データベース]]など）が使われている。MVCの概念では、データの（UI以外の）入出力は取り扱わないので、データアクセスも本来MVCの概念の範疇を超えるものではあるが、あえて言えばmodelの中に隠蔽されると考えられる。&lt;br /&gt;
; View&lt;br /&gt;
:modelのデータを取り出してユーザが見るのに適した形で表示する要素である。すなわち、UIへの出力を担当する。例えば、[[ウェブアプリケーション]]では[[HyperText Markup Language|HTML]]文書を生成して動的にデータを表示するためのコードなどにあたる。&lt;br /&gt;
; Controller&lt;br /&gt;
:ユーザの入力（通常[[イベント (プログラミング)|イベント]]として通知される）に対して応答し、それを処理する要素である。すなわち、UIからの入力を担当する。modelとviewに変更を引き起こす場合もあるが、直接に描画を行ったり、modelの内部データを直接操作したりはしない。&lt;br /&gt;
&lt;br /&gt;
なお、UIにおける入力と出力は本質的には不可分なものであり、したがってviewとcontrollerはいつでも分離できるとは限らない。このようなM-VCとなるような構造を&amp;#039;&amp;#039;&amp;#039;Document-View&amp;#039;&amp;#039;&amp;#039;と呼ぶ&amp;lt;ref name=&amp;quot;posa&amp;quot; /&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
対象となるモデルにビュー・コントローラを持たせるだけでなく、ユーザとモデルの構成要素との対話のために各々の構成要素にもビュー・コントローラを持たせる構造を拡張MVCと呼ぶ&amp;lt;ref&amp;gt;{{Cite journal|和書&lt;br /&gt;
|author = 笠原　宏&lt;br /&gt;
|author2 = 増田英孝&lt;br /&gt;
|author3 = 山口智久&lt;br /&gt;
|date = 1991&lt;br /&gt;
|title = 拡張MVCとその応用&lt;br /&gt;
|journal = 東京電機大学総合研究所年報 1991-92&lt;br /&gt;
|pages = 133-134&lt;br /&gt;
|accessdate = 2013-11-23&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== MVCのシナリオ ==&lt;br /&gt;
MVCの実装はさまざまであるが、制御フローは一般的に次のようになる。&lt;br /&gt;
# ユーザが[[ユーザインタフェース]]を通してviewに入力する（ボタンを押すなど）。&lt;br /&gt;
# controllerがviewからの入力イベントを処理する。controllerは登録されている[[イベント駆動型プログラミング|イベントハンドラ]]や[[コールバック (情報工学)|コールバック]]を通して呼ばれることが多い。&lt;br /&gt;
# controllerがユーザのアクションに応じてmodelのメソッドを呼ぶ。その結果modelのデータが書き換えられることもある&amp;lt;ref&amp;gt;複雑なcontrollerはアクションの実体を隠蔽し、拡張を容易にするため、[[Command パターン]]を使って構造化されることが多い&amp;lt;/ref&amp;gt;。&lt;br /&gt;
# viewがmodelから関連するデータを取得し、出力を更新する。&lt;br /&gt;
# viewがユーザの次の操作を待つ。始めに戻って、新しいサイクルに入る。&lt;br /&gt;
&lt;br /&gt;
== MVCとデザインパターン ==&lt;br /&gt;
&lt;br /&gt;
MVCは、[[デザインパターン (ソフトウェア)|デザインパターン]]の1種と扱われる場合もあるが（MVCパターンと呼称される）、MVC自体が他の小さなデザインパターン([[Observer パターン]]・[[Command パターン]]・[[Factory Method パターン]]・[[Facade パターン]]など)を利用して実装されることが多いところからすると、デザインパターンというより、さらに粒度の大きい1種の[[ソフトウェアアーキテクチャ]]という方が適当であろう&amp;lt;ref name=&amp;quot;posa&amp;quot;&amp;gt;{{cite book | author=Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal | title=Pattern-Oriented Software Architecture | publisher=John Wiley and Sons | year=1996 | id=ISBN 0-471-95869-7}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://c2.com/cgi/wiki?ModelViewControllerAsAnAggregateDesignPattern Model View Controller As An Aggregate Design Pattern]&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
各モジュールが比較的はっきりと分かれ、プログラムの見通しがよくなるとともに、[[ユーザインタフェース]] (UI) 部分を別のモジュールに取り替えることが容易となるのが利点である。[[自動プログラミング]]などにも適している。&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
{{脚注ヘルプ}}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 関連項目 ==&lt;br /&gt;
* [[イベント駆動型プログラミング]]&lt;br /&gt;
* [[多層アーキテクチャ]]&lt;br /&gt;
* [[JFace]]、[[Google Web Toolkit]]、[[Spring Framework|Spring MVC フレームワーク]]&lt;br /&gt;
&lt;br /&gt;
{{デザインパターン (ソフトウェア)}}&lt;br /&gt;
{{DEFAULTSORT:Model View Controller}}&lt;br /&gt;
&lt;br /&gt;
[[Category:ソフトウェアパターン]]&lt;br /&gt;
[[Category:ソフトウェア工学]]&lt;br /&gt;
[[Category:プログラミングパラダイム]]&lt;br /&gt;
[[Category:ソフトウェアアーキテクチャ]]&lt;/div&gt;</summary>
		<author><name>219.118.163.49</name></author>
	</entry>
</feed>