MVACってなぁに?

良いことが書いてあるのでその内容に突っ込む意図ではなく、単に「MVAC」という語についての雑感です。

Web Applicationを綺麗に設計するためのMVACという考え方 - $shibayu36->blog;

わたしのアンテナが低いのか、MVAC というのは初耳でした。のでちょっとググッてみたのですが元ネタがわかりせんでした。本当に「デブサミ2009 はてなの開発戦略」が元ネタなのかな?はてな社内ローカル用語?

というわけで、どこが言いだしっぺなのかよくわかりません。お願い、教えてエロい人。

このお話、個人的にはなんだかとってもデジャブでした。MVC、お前もか - みねこあで感じた「Mってなによ?」的なモヤモヤさが再びです。んー、MVC2 とか MMVC とか MVCS とか MVAC とか いっぱいあると混乱します。それぞれで各要素の絡み方も違えば、Mなどの各要素すら実は違ったりで。

誰かまとめてくれないかしら(sumimさんクォリティで)。


* * *


もうすこしダラダラ蛇足(つまり、デジャブの追体験)をすると、

ここで問題が一つあります。それはControllerが「リクエストをハンドリングする」という役割と、「Modelをいくつか利用して処理を行う」という、二つの違う役割を担っていることです。

Web Applicationを綺麗に設計するためのMVACという考え方 - $shibayu36->blog;

の部分がどうにもイボイボしていて、「Model をいくつか利用して処理をおこなう」も Model じゃん、と思ってしまう。由緒正しき Smalltalk GUI フレームワークに端を発する「MVC」の感覚では、Application といっているのも M じゃないかな。

そもそもの(GUIの) MVCは、単純に、対話型アプリケーションを作る際、変わりやすい Look&Feel *1から、変わりにくい Model を 開放閉鎖原則に従って 責務分割した姿です。

一方、Web の MVC (MVC2)は、構成要素の名前こそ元のMVCをインスパイアして付けられたと思うのですが、その構造はかなり構造が違います。けれどインスパイアされた「構成要素の名前」くらいは、だいたいの意味を引き継いで欲しいと願ってしまいます。

しかし、MVC2 について語られるものを(特にその問題を述べるものについて)読むとき、Controller が Model化してしまうくらいに、 「Model」=「ORMに毛が生えたもの」という定義になってるように感じます。それにより、「MVC」 だけじゃなく、「M」,「V」,「C」 の それぞれもバズワード化しているように思えます。そこまでして「MVC」という語を使う意味があるのかなぁ、とかとか。

MVC」という語に拘るなら、MVAC という言い回しよりは、gfxさんがはてブコメントで 紹介している

すこし以前から言われていることですが、ORMをMVCモデルにおけるModelそのものとして扱うことで、本来Modelで扱うビジネスロジックをControllerに書いてしまい、Controllerのロジックが増大し、結果的にメンテナンスがしにくい、拡張が難しいコードが生まれてしまいがちです。

(中略)

その対策として、Modelを見直しを行い、ORM、DBI、Web API、他のKVS、そしてmemcachedなどマルチソースでビジネスロジックを記すレイヤーとしての位置づけとすることを考えてみたい。多くの情報を扱う今、こちらの考え方が自然に設計ができると考えます。

Re: @kazuho: handlersocket plugin や mycached を使えば memcached は不要か、それとも使うべきケースがあるか。考察せよ [10点] - blog.nomadscafe.jp

(強調はわたし)


のほうが、語の使い方として個人的にしっくりきます。


* * *


ここらへんはの用語の混乱のお話は、以前のデジャブエントリで頂いたコメント

umejava
2009/10/19 08:31
WebのMVCですが、Domain-Driven Designの言葉で語れば混乱は生じないと思うんですよね。http://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/chap1.html

MVC、お前もか - みねこあMVC、お前もか - みねこあ

のように、MVC じゃない語の方が筋がよいと思います。みんな DDD 用語で語ろうよ!名前重要だよ!・・ということでどうでしょう?

イムリーなことに DDDはもうすぐ日本語で発売ですよ!

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

みんな、買おうぜっ!

*1:Look が View で、Feel が Controllerです