質問: MVCは、プログラムを作るとき処理によって分別する方法の一つで、MVCについて記述してあるサイトを見てみると、 Mモデルが見た目や入力に関連しない処理で、Vヴュアーがモデルの逆で見た目、入力の処理、CコントロールがMとVを司って動かす処理であるとの認識が得られました。 しかし、何でもMVCに正解は無いらしくある程度主観に頼らざるを得ないと感じました。いざ自分が何かを作るとき、記述した処理をMVCのうちのどれかに区分するとき、 どの区分に当てはめるかは、百歩譲ってMとVは、何となく想像が付きますがCに当てはまる処理って何なのでしょうか。百歩譲らなくてもMで合っているのかとかVで合っているのか、と悩む人が多いそうですが、 何かこれらの助けとなるような指標やコツは、無いのでしょうか。
回答: なぜ「MVC」かと言いますと、「MV」だけでもできますが、 それだとMとVが密結合になりがちなので、Cに仲介させるからです。 「Skinny Controller, Fat Model」が一般的に推奨されている設計ですが、 なぜそうなるかといえば、**Mが主役**だからです。Cは主役でなく脇役です。 ドメインに関するビジネスロジックは、基本的にCではなくMに書きます。 たとえると、コントローラを「中央司令室」とイメージすると、Cが太っていきます。 そうではなく、料理店で言うと、料理を作る厨房がM、客が食べる客席がV、Cは通路やカウンターです。 もともとMVCモデルはSmalltalkにあったもので、オブジェクト指向的な設計です。 データに処理をくっつけていくのがオブジェクト指向の基本なので、 データのあるMが主役です。だから太らせます。その逆は「ドメインモデル貧血症」です。