ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

MVCを再確認してた

今回はタイトル通り、MVC(Model-View-Controller)のおはなしです。

年末だし研究でCakePHPを使って書いてるコードを見直してみました。さっくりですがレビューした結論から申し上げます。

やっぱりMVCわかってなかったヽ('ω')ノ三ヽ('ω')ノ

うん、私いちおうMVCはそれなりにわかっていたと思ってたんです。研究でも書いてたし。

でもそんなことなかったヽ('ω')ノ三ヽ('ω')ノ

こちらはよくあるMVCの概略図です。悲惨な勢力範囲が分かるようにWikipediaにあったのをちょっと色分けしただけです。
f:id:yuu_xxxx:20121228222030p:plain
で、こちらが私の書いたコードにおけるMVCの勢力図です。
f:id:yuu_xxxx:20121228222044p:plain

何がどうなっているのかというと、

  • ModelがほとんどModelの親になるクラス*1を継承しただけで存在感がまるでない
<?php
class Foo extends AppModel {
    public $hasMany = ["Bar"];
}

こんなのばっかりです。Modelのクラスに最初からあるメソッドで事足りれば別にいいのですが、決してそんなことはないはずなのにこういう貧弱なModelがいくつもあります。

  • Controllerが貧弱なModelの分もあほみたいに頑張ってて泥臭いことやってる
  • しかも少しばかりではあるものの見た目にかかわるところをいじってる

HTMLタグを直に吐いたりしてない分ましといえばましですが…

  • Viewで見た目の制御以外に関係ないロジック書いちゃってる

↑Controllerがデータを中途半端に処理して丸投げしちゃってる
↑多分Modelの影がものすごく薄いのが原因

ちなみにコードの量が一番多いのはViewでした。HTMLを吐き出してるからというのもあるのですが、Controllerのお仕事を少し奪っちゃっているのが効いたんだと思います。

どう書き換えようか

現状、テストしやすい癖に影の薄すぎるModelにはもう少し働いてもらうようにして、こき使われているControllerに楽をしてもらいましょう。Controllerもほぼ生のデータをViewに丸投げしているせいで切り分けがあいまいになっているので、ここもちゃんとすっきり出力できるようにしたいところです。時間も押しているので、リファクタリングするならひとまず状況が上向きそうなModelの充実からでしょうかね。

*1:Modelを表すクラスはAppModelクラスを継承することになってます