uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

「えせMVC論争」についてこそこそと一言言っておくか

某所でRailsの「えせMVC」の論争が話題のようです。へたれなので、トラバは打ちませんが一言いわささしていただきます。

  • MVCパターン != MVC2。これ重要。Java界では誰もMVCなんていってません*1。むしろ「2」をつけることで、「本来のMVCそのものじゃない」ということを言ってます。混同するべきじゃない。「MVC2は純粋なMVCじゃない」と怒るのはありえない。純粋じゃないって最初から言ってるんだから。MVC2はMVCに対して比喩的ないいかたです。だって、M->Vで更新通知がオブザーバーパターンになってないでしょ。MVCでありうるわけがない*2。これに比べたらロジックのおき場所がどうの整合性がどうのとかは些細な問題です。RailsGrailsもWebのアプリケーションアーキテクチャとかについて、「えせMVC」か「えせじゃないMVC」かでいうと、間違いなく「えせ」*3
  • 「モデル、ビュー、コントローラという用語を使うから(狭義の/本来の)MVCだと思っちゃったじゃないか〜」という主張は、一理ありますが、じゃあ代わりに何を使えば良いかは問題。ちなみにGrailsだとRailsのModelに相当するのは「ドメインクラス」です。
  • Railsフレームワークとしてサービス層をサポートしてないのが問題。必要なものが存在していないことは人間を不機嫌にさせる。Life is beautifulの方がGrails使ってたら、もしかしたらこんなことにはならんかっとったかもしれませんね。複数のデータ間にまたがったデータ整合性保証を扱うロジックをおくべき場所が明示的にどこかにあるのが健康的なのだと私は思います。

(追記。「本来のMVC」って、SmalltalkのMVCのことだと思っていいんですよね???付随する議論を見てると、MVCという言葉が指している概念が、人によって違っている気がしてきた。「MVC=WebアプリアーキテクチャのMVC2」だと本気で思ってる人がいるとしたら、それは考えをただしたほうが良いでしょう。Swingのデータモデルとかテーブルモデルの仕組みのほうが近いんですよ。Swingのデータモデルと、Webアプリの永続化entityがぜんぜん違うのは、明らかだと思うのですよ。これら両方あわせて「MVCパターン」と言うとしたら、何がなにやら・・・。)

*1:言ってる人が多々いるような気がしてきた。MVCについて[http://ja.wikipedia.org/wiki/Model_View_Controller:title=日本語版Wikipedia]の説明も変だな。[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller:title=英語版]はまだまし。

*2:JSFとかseasideとかliftとかWicketとかリスナモデルにはなってるんだっけかな?V->Mの方向だけだったかな?

*3:でもえせだから悪いとは思いません。えせ上等。