yojikのlog

yojikのブログです

WebAPIのMVC

http://naoya.g.hatena.ne.jp/naoya/20060510/1147243094
そこそこジェネリックなViewにModelをプラグインして使うというのは、PluggableMVCに似ていると思った。PluggableMVCの場合はVCペアに関してModelを差し込むわけだけど、イメージは同じ。

5 プラガブルを利用するMVC
 今のところ、Smalltalkシステムの中で一番美しいMVCです。ビューとコントローラのペア(VC)は、モデルに関係ない形態になっています。どんなモデルでも、このVCに差し込んで、MVCにするだけで動くようになっています。この差し込んで使うということで「pluggable(プラガブル)」の名前があります。電源プラグ(VC)に、コンセント(M)を差し込むように使えるからです。

どんなModelでもいいとは書いてあるけど、perform: menuSelector等には反応しなくてはならないわけで、つまりViewがModelに対して特定のAPIを実装することを要求していることになる*1。これだと一見ViewにModelが依存してそうなんだけど、API自体がジェネリックでよく検討されたものであればOKという算段だと思う。
とにかくMVCの歴史って再解釈されながらぐるぐる回っていて面白いなぁと思った。
(余談だけど、プラグとコンセントのメタファが意外に無理ある感じです。。)

追記:
ちょっと間違い。SmalltalkのPluggableMVCの場合は、perform: メソッドで設定されたセレクタを動的に実行するのだから、ModelのAPIは結構自由*2。もちろん最低限のAPI実装は必要なんだけど。*3
WebAPIで完全に同等の事をやるには、、、View側からScriptを送り込んでModel側で実行するしかない? ちっと危険かな。バランス重要ということで。

追記2:
あ、でもScriptを受け付けるWebAPIを持ったModelは結構面白いかもしれない。セキュリティを考えると、汎用的な言語ではなくて、データ照会と変形に特化した言語(DSL)にする必要があると思うけど。

*1:追記参照

*2:例えばVC側からでもmenuSelectorでやることを設定可能

*3:ModelはmenuSelectorとかを保持する必要があるわけだから