MVC2 と Service層の関係

あんまりひっぱつるもりもないし、言いたいことは言ったので蛇足感たっぷりだけど ^^;

id:yugui さんのコメントは全くもって適切だと思う。で、せっかくコメントをいただいたので。前のエントリ「繰り返される MVC model 2 の話 - 討論妄言録」で主張している事を図に起こしてみた。

意図としては、特定のフレームワークに対する意見とかではなくて。あくまでもアーキテクチャとして MVC2 をどう理解すべきか、という点が焦点。

Model = DB の抽象化層とみなすと

Model = DB の抽象化層とみなすと Model, View, Contoroller と同レベルに Service が語られることになる (図 1)。これだと、Service が存在しない構成にした場合に、当然ながら、複数のデータオブジェクトにまたがるトランザクショナルな処理を記述する場所が失われてしまう。そのような縮退させた構成を以って、MVC2 がどうのとかいう議論しても。そもそもそれは、MVC2 による抽象化構造とは異なるのだから、本来的ではないように思える。また、基本構造なのに、存在したりしなかったりしてたら、インパクトが強すぎて、アーキテクチャとして使いにくいよね。

というわけで、問題視するところは。構成を縮退させてしまったこと。あるいは、簡単化できる特定の問題のみを主対象として設計された道具を、簡単化できない問題にまで適用しようとしているその選択行為*1。だよね。一般的には、鉈一本で何でも捌こうとしない方がいい。適材適所で、適切な手段を選びたい。


Service は Model 内部の構成方法

Service は Model 内部の構成方法の話 *2 であって。MVC2 の文脈で並列に語られるべきではないのではないかしらん。Service も含めて Model、とみなすべきところ (図 2)。

MVC2 としては、Service はなくても良いこともあるし、ActiceRecord などでデータをオブジェクトとして抽象化することも必須ではない。MVC2 という観点では、どちらも Model の実現手段にすぎないよね。


MVC2 != MVC

あと、蛇足ついでに。

MVC2 (MVC model 2) は。MVC という文字を含んでいるけれど、仕組みとしては MVC とは違うので。紛らわしくも名前が類似した MVC2 と呼ばれる別のもの、と諦めてる。だから、"MVC" と "MVC2" は、気をつけて使い分けているつもり。時々、勢いで打ち損じるけれど。大文字小文字などの表記方法を含めて、一文字でも違えば無関係のもの、というのは、この業界の常識(何)だよね。(^^;

*1:適切な使い方を知らずに使い物にならない、なんていうのは論外

*2:id:yugui さんのいう「サービスレイヤーとMVCは直交」というのと同じ事だと理解してる