最近以下の記事などMVCが話題に上がります。
MVCがわからなくて議論についていけません*1。そこで調べてみました*2。
Gof
MVCを調べると、よくオブジェクト指向における再利用のためのデザインパターン(以下Gof本)で紹介されていると出てきます。 しかし、Gof本を見ても「MVCパターンではGof記載している以下のパターンが使っている」としか書いてありません*3。
- Observer
- Composite
- Strategy
- Factory Method
- Decorator
What Are The Benefits of MVC? | Internet Alchemyに該当箇所が引用されています。英文です。
MVCとは何か?
Gof本だけではMVCが何かわかりません。 しかしA Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk-80 が参考図書に上げられています。 これを元に検索しました。
Trygve/MVCから以下の二つがMVCの原典だとわかります。*4
- THING-MODEL-VIEW-EDITOR MVCの元ネタ。この時点ではControllerという名前はない
- MODELS - VIEWS - CONTROLLERS 上をネタにMVCの役割を解説*5
また、MVCパターンの適用限界を考える(1) (Weblog on mebius.tokaichiba.jp)は上記の論文を考察していて面白いです。
WebMVCについて
また、「やはりお前らのMVCは間違っている」でも出てくるように、 MVCについての議論で必ず混乱を引き起こすのがWebMVCとMVCの違いです。 MVCは1979年にGUIプログラミングのために考えられたデザインパターンです*6。
WebMVCとは何でしょうか?Server-side Java: Understanding JavaServer Pages Model 2 architecture - JavaWorldでは図「JSP Model 2 architecture」にModel、View、Controllerが記載されています。 どうやら1999年にWebアプリケーションサーバにMVCパターンを適用したのもののようです。*7
まとめ
調べただけで内容は読んでいません。続きは読んでのお楽しみ。
*2:原典にあたるのは大事です。
*3:どういう問題をどういう方法で解決するのか書かれていません
*4:当時のXEROXのパロアルト研究所はとんでもなく尖った所だったようです。この頃のパロアルト研究所をスティーブ・ジョブズ、ビル・ゲイツが見学し、GUI OSをパクります。
*5:モデル・ビュー・コントローラ - Trygve Reenskaug - Digital Romanticismに翻訳があります。
*6:当時、デザインパターンという言葉はありませんでしたが、デザインパターンでいいと思います。Wikipediaみると「MVC自体が他の小さなデザインパターンを利用して実装されることが多いから、デザインパターンというより、さらに粒度の大きい1種のソフトウェアアーキテクチャという方が適当」とか書いてあるけど、デザインパターンが実装を抽象化したものだし、抽象度の違いで名前を変えると名前がいくつあってもたりないし、抽象度が微妙なやつの名前に困るだろうし、全部デザインパターンでいいと思います。
*7:14年経ってから「WebMVCは真のMVCじゃない」と言われても、そりゃあ名前が紛らわしくて俺も勘違いしてたけど、それをもって今更名前を否定されたら新しい名前決めるまで議論が進まなくて面倒くさいじゃん。「紛らわしいから気をつけてね」でよくねぇ?と思うけど、原典を読んだらMVCとWebMVCの間に致命的な矛盾が見つかるかもしれないし、大きな声で言うのはちゃんと読んでからにしよう・・・