« iPhotoやiPodでうまくファイル名順に写真の並び替えができない | メイン | イトーヨーカドーのネットスーパー - 安い・便利・丁寧 »

2009年1月25日

CakePHPへの愚痴いろいろ

CakePHPは便利なフレームワークの一つであることは確かだが、いくつか使ってみての愚痴を書いてみたい。

(1)仕様変わりすぎ

バージョンによって仕様がコロコロ変わっている。使い始めて「あれ?」となったのは、思いつくだけでも、

・conditionの書き方変更
・findAll廃止
・web routingの変更

などなど。このため入門書や解説サイトが役に立たないことがある。

(2)ロジックはモデルに

というベストプラクティスのようなものが少し前に議論されていたが、「当たり前の話ではないか」と違和感を感じざるを得なかった。

Sooey:CakePHPを使ったMVC設計のベストプラクティス

特にPerlやPHPでプログラミングを始めた人は、CakePHPに限らずコントローラーにベッタベタにロジックを書く人が多く、Javaでプログラミングを始めた人は、ちゃんとドメインモデルを守ってモデル・エンティティにロジックを書くというスタイルに慣れていると思う。あくまで主観。

(3)モデルはエンティティではない

最初にハマった。data?何それ。

Happy Engner Life:CakePHPのモデルをエンティティとして扱う

(4)プラグインの構成要素

CakePHPのプラグインは「コントローラー+モデル+ビュー」をまとめたものが、プロジェクト間での可搬性という意味でプラグインという概念を考えると、「コンポーネント+ヘルパー」のパッケージを使う機会のほうが多いと思う。

ヘルパーとは、ビューのロジックの切り替えを隠蔽したもの(HTMLを書く必要を無くすという意味合いではない)である。その切り替えロジックはコントローラー間で共通である事が多く、コントローラー間の処理を共通する処理はコンポーネントで書くのがセオリーだ。

例えば携帯電話向けページの処理。ヘルパーでキャリア判別を行っているものも見たことがあるが、キャリア判別をコンポーネントのbeforeRenderで行い、ヘルパーはコンポーネントの判別結果(フィールド値なり)を参照して分岐を行えば、判別処理を一箇所にまとめることができスッキリとする。

このような「モバイルプラグイン」のようなコンポーネントとヘルパーの組み合わせであれば、可搬性という意味でもいいのではないかと思うのだが、周りはどうしているのだろうか。一方で、ヘルパーはコンポーネントに依存しちゃいかん、という文も見かけたことがある。全く不可解だ。

(5)設定の切り替え

本番環境とテスト環境によって設定の値を変えたい場合が多々あるが、CakePHPは環境の切り替えをサポートする機構が弱いのではないかと思った。できれば設定値一発で、使用する設定ファイルを切り替えられるのが理想だ。

既に自分で取り入れていて一番シンプルなのは、.htaccessやhttpd.confの中に、SetEnvで環境ごとの値を置いておいて、PHP側で$_SERVERから読み出して認識させる方法。

テスト環境と本番環境で思い出したが、テスト環境は「test」や「debug」という英単語で良いと思うのだが、本番環境を「real」としていた会社チームがあった。素で「debub」と書く奴もいたな。プログラミング言語は英語で書く言語だけに、スペルミスはもちろん、こういう微妙な間違いもチームの士気を下げる一因となってしまう。

コメント

cakePHPってユーザ数多いから使ってみたけど、設計がいけてなさすぎる。

アプリケーションのコーディングの効率も悪い。

何がいいのか意味分からん。

コメントありがとうございます。

その設計のいけてなさを、ユーザ数でカバーしているような感じですね。知識面でもライブラリの資産面でも、フレームワークって、ユーザ多くてなんぼですし。

コメントする

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)