PoEAA ch14 Model View Controller
Model View Controller
Splits user interface interaction into three distinct roles.
- 最も多く引用される(そして、もっとも間違って引用される)パターンの一つ
- 歴史
- 1970s
- by Trygve Reenskaug
- Smalltalkプラットフォーム
- UIフレームワークやUI設計に多くの影響を与えた
How It Works
- Model
- ドメインの情報を表現
- UI以外のすべてのデータと振る舞いをもつ
- Non-visual
- Domain ModelとかTransaction Scriptとか
- ドメインの情報を表現
- View
- ModelをUIで表示
- 表示だけ
- Controller
- 情報の変更を担う
- ユーザ入力を受け取る
- モデルを操作する
- ビューを更新する
- 情報の変更を担う
- UIはViewとControllerとのコンビネーションであるといえる
- 主要な分離は2つ:
- ModelからViewの分離
- ViewからControllerの分離
ModelからViewの分離
- 重要
- この分離が重要な理由
- 依存の方向がミソ
- View -> Model
- Modelに影響を与えること無くViewを変更・追加できるよう
- View -> Model
- 複数のViewを同時に表示するときどうするの
- あるView上からModelに変更を加えた
- 他のViewも変更に追従させたい
- ModelからViewに教えてあげることはできない
- ModelはViewを知っていてはいけないから
- GoFのObserver Pattern使え
- Modelは変更されたらevent発行
- Viewはeventをリッスンして情報再表示
ViewからControllerの分離
- 前者ほど重要ではない
- 皮肉にも、MVCの先駆けであるSmalltalkが、この分離をできていなかったりする
- なんで分けるの
- 1Viewに対して2つのControllerを持たせたりできる
- 例: 編集可能/不可能で切り替え
- Strategy Pattern
- 例: 編集可能/不可能で切り替え
- しかし現実的には1View - 1Controllerで、分離されなかったりする
- 1Viewに対して2つのControllerを持たせたりできる
- ほとんどのGUIフレームワークがViewとControllerとを合体させてしまうので、MVCへの誤解につながった
- ModelとViewはわかるけどControllerはどこ?
- ModelとViewとの間にあるよという考え方
- PofEAAでいうApplication Controllerパターン
- 【補】contextに応じてModelとViewの出し分けだけ担うやつ
- MVCのCとは全然異なる
- PofEAAでいうApplication Controllerパターン
- MVCについてもっと深く知りたけれぱPOSAを読め
When to Use It
- MVCパターンで重要なのは、先述の2つの分離
- とくにViewとModelとの分離が重要
- 分離しなくていいのは、非常にシンプルなシステムの場合のみ
- 【補】Smart UI Antipatternってやつ
- Modelがロジックを持たない
- Modelがロジックを持ち始めたら直ちに分離せよ
- 分離しなくていいのは、非常にシンプルなシステムの場合のみ
- ViewとControllerとの分離はそれほど重要ではない
- 本当にメリットがある場合のみ分けるとよい
- リッチクライアントではふつう分けない
- Webフロントエンドでは分けるのが普通
- 本当にメリットがある場合のみ分けるとよい
英語
- vogue
- 流行り