ちょっと前に、「MVCモデルを使っているんだから、このシステムはオブジェクト指向設計です」的なことを言われた事がありました。おっと、という違和感を感じたのは覚えているんですが、当時は具体的に何が違うかまで表現できなかったのでスルーしたんですが、あれからずっと考えて、やっぱりおかしかったように思います。


MVCとは今更説明するまでも無いですが、ようは1つの機能を

  • Model
  • View
  • Controller

の3つに分けて考えようよ、というものです。

これがオブジェクト指向とイコールであるか、どうかなんですが。。。
以前自分が書きましたが、オブジェクト指向のオブジェクトとして抽出されるべきものは「役割」です。そういう視点で見ると、確かに役割で分割されているように見えます。が、個人的には抽象化がちょっと荒い気がします。

Viewの中にロジックは存在しない、的な解釈をよく聞きますが、実は表示する為の整形やコード置換という形で業務仕様が混ざってきます。そこまで含めてViewとするのか、そうじゃないのか人によって違います。またControllerも、構造化プログラミング上の「制御」を指すのか、UIからのイベント・ハンドラを指すのか、この解釈によって大きく変わります。Modelは、このControllerの解釈によってそのあるべき姿を変えるでしょう。


自分個人の解釈は、Viewには表示の為の整形や置換等まで含み、ControllerはUIからのイベント・ハンドラを指す、Modelはイベントに対応したユースケースが当てはまる、と思ってます。

ViewはViewだけのルールで動けるように隔離した方がより整理できますし、Controllerでは業務的な要素以外を徹底的に排除しないと、Modelの業務的な純度が薄れてしまいます。うっかりControllerに業務的な要素を持たせ始めると、Modelはたちまち存在意義を失ってしまいます。


役割と委譲という視点ではオブジェクト指向的ですが、やっぱり何か違う気がする。。。