PHPerのMVCの一体どこが間違っていたのか


 PHP Advent Calendar24
xhprof使

MVCPHP2012&WordCamp Tokyo2012LTMVC
PHP*1LT

MVCとはなんなのか


MVC

MVC1970(Xerox Parc)1980Smalltalk-80*2MVCGUI3


Model


View


Controller
ModelView



MVC

@koichik

Webへの対応


WebMVCJAVAHTTPMVCMVC2*3 *4MVVC
MVC2

StrutsStrutsMVCViewJSP()ActionActionForm BeanModelViewJSP*5

PHPMVC2MojaviStrutsWebApplicationFramework(WAF)ViewMojaviViewView2(View)

Ruby on Railsの登場


Ruby on RailsWAF ActiveRecordWAF

RailsModel
rails generate model profile

ActiveRecordMVC

RoRMVC""*6



PHPCakePHPCakePHPRoRActiveRecordAppModelPHPerMVC

PHPerの認識しているMVC

さて、このようにして多くのPHPerが認識するMVCが誕生しました。この特徴を一度整理してみましょう。*7

Model
自動生成されたアクティブレコードのモデル
View
テンプレートファイル。ロジックは排除。モデルへのアクセスは厳禁。
Controller
Model,View以外のすべてをコントロール

またMVC間の関連を下図に示しました。

このアーキテクチャでは必然的にコントローラは肥大化します。

何が間違っているのか


PHPerMVCSmalltalk MVC
LTMVCMVC
MVCMVCGUIWeb()
MVC

結論


PHPerMVCMVCMVC
2012

PHP Advent Calendar25PHP5.5foreach

*1:まさかの3万views越え!

*2:ネット上には原典は見つかりませんでしたので後継ドキュメントを示します "Applications Programming in Smalltalk-80(TM):How to use Model-View-Controller (MVC)" by Steve Burbeck, Ph.D. http://st-www.cs.illinois.edu/users/smarch/st-docs/mvc.html

*3:MVC2という用語はJSFMVC対応Type2を指すものがあれこれした結果であるとかないとか?要出典

*4:こちらの"Model2" architectureが元のようです http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eedocs-419425.html#7036-design_ent_app-2.0-oth-JPR

*5:参考: http://struts.apache.org/1.x/index.html

*6:参考: Life is beautiful: Ruby on Railsの「えせMVC」の弊害

*7:あえて、一番ダメな例を出します