2009年10月14日水曜日

MVCへの考察

最近、気になるエントリがあった。

Ruby on Railsの「えせMVC」の弊害
http://satoshi.blogs.com/life/2009/10/rails_mvc.html

えせMVCについてそろそろ一言言っておくか

Skinny Controller, Fat Model

あんまり他のブログについて言及することはないんだけど、
今回については感じることが多いので書き散らす。


私は Model の実装を多くするのが良いと考えている。

表現が少し挑発的だけど、
@Satoshi さんの主張に共感する。
しかし、何故か実際の反響としては
思ったより多くの人が反論の立場をとっている。

自分の言葉に置き直すと、@Satoshi さんの主張は
「テストしやすく、堅牢に設計すべき」である。
この主張には反対する人は少なそうなのに、
微妙に(結構?) RoR の批判が入っているためか、
受け入れない人が多い。

また、@higayasuo さんは「Controllerも徹底的にテストしろよ」
という主張。正しい。でも、Model のほうがテストし易いのは、
きっと誰にとっても明白ではないだろうか。

#まぁスタブの必要な Model はテストし辛いけどね。
#でもそれは設計ミスかも。

そもそも Web Application を開発することはない、
組み込みエンジニアの私がコメントするのは
立場を間違えている気もするけど。

それでもドライバ以外にも UI のあるアプリを最近実装したり、
MVC は基本的に有益なアーキテクチャなのは実感しているつもり。

自分の言葉で MVC を簡単に且つ乱暴に且つ独りよがりに表現すると次の内容になる。
  • Model: 末端でテストが楽なレイヤ。他モジュール関連度は低い(データ依存なし)。UI 以外の全てのロジックが理想。Controller の小間使い。永続化データの管理が多く堅牢にしたいレイヤ。
  • View: UI 配置がメイン。最近は表示ロジックも多い?(Javascript, Flash)。変更が多く、柔軟にしたいレイヤ。
  • Controller: View と Model を繋げるのが責務。モジュール依存度が高いので、ロジックは少ないのがベスト(実装量が増えるとシステムの複雑度が跳ね上がる)。
基本的には試験し易く堅牢な Model をいかに増やすかが
設計のキモだと思う。Fat ではない Smart な Model。
理想論だけどね。

実際の開発現場ではスピードを求めて、
可能な限り Model を薄くする場合もあると思う。
何が正しいのではなく、何が最適なのか。
それを提案できるエンジニアを目指したい。