ラベル php の投稿を表示しています。 すべての投稿を表示
ラベル php の投稿を表示しています。 すべての投稿を表示

2010年10月19日火曜日

KohanaのORMについて徒然

http://gist.github.com/632600



KohanaオリジナルのORMはとってもシンプル。
シンプルすぎてそのまま使うと危険なほど。



いくつか実運用時に気になった点を修正したORMを上げてみました。



1) Column list


テーブル定義を動的にとるのがデフォルトとされています。
これは、Cakeとかでもそうだしまぁ問題ないですね。
ただ、なぜかコレがキャッシュされません。


SQL異常に多いなーと思って中見たら、
毎回show columns クエリー飛ばしているじゃありませんか。
ということでファイルに1日キャッシュ。


alterしたりしたあとはcacheディレクトリ削除すればよし。


2)Has many


デフォルトは、
$user->child->find_all();
のようにもう一回クエリを飛ばしなさいよ!ってことらしい。


Joinして絞り込みたい時もあるでしょうが。使いようだと思います。


なのでwith()を拡張して$user->with('child')でLeft joinさせます。
あまり負荷を考えるとよろしい作法ではないですが、
使いどころ次第かと思います。


3) 透過キャッシュ


せっかくrowオブジェクトを持っているのだから
レコード更新時にキャッシュ更新したり、
参照時にキャッシュからとったりは透過的にできるでしょう。


findはPKで参照している時しか対応しづらかったのでそこまでですが、
アプリ作る際に意識していればこれであらかたキャッシュは回せるかと思います。


save_with_cacheでselectしなおしているのがちょっとダサいが、
たいていの更新はもとのrow objectがloadedなので問題ないはず。




2010年10月3日日曜日

CakePHPとCatalyst

日々日々、
なんらかのWeb Application Framework (WAF)つかっているわけですが、
なんとなくCakePHPかCatalyst使うことが一番多いので、
言語すら違うのに比較した所感を。


まず、それぞれの概要から。


■Catalyst  - Perl


PerlのWAF代表格ですね。


http://www.catalystframework.org/


非常に柔軟な特性を持ち、カスタマイズが簡単です。
その名の通り触媒なので、設定というか一緒に使うモジュールの組み合わせで、
ありがちな処理の殆どを吸収してくれます。
専用モジュールがCPANにガスガスあがっているのが素敵


■CakePHP  - PHP


PHP版Ruby on railsですね。


http://cakephp.org/


ActiveRecordパターンという縛りを設けることで、
コーディング量を極端にへらしてくれます。


ドキュメントの豊富さが際立っている気がしますね。


とにかく楽したいときに最高です。


 


で、それぞれ仕事・プライベートで使ってますが、
なんとなく、思うところがあったり。


どちらも似たようなWAFなんですが。


一番大きく違うのは、DB関連というかModelの解釈ですかね。


CatalystはModel用ORマッパーが交換可能です。
好きなORマッパーを当て込めます。
なおかつ、ModelクラスごとにORマッパー変えられたりもします。


これがあるから、アプリレベルでのDBシェーディングなんかも表層で気を使わないですむような実装が簡単にできたり。
コアモジュールをガシガシOverrideとかしないでいいです。


CakePHPはオリジナルのORマッパーしか使えません。
でも、そのかわりにそのORマッパーのルールに従う限りめちゃくちゃ簡単です。
コード量アホかってくらい短くすみます。
なおかつなかなか直感的に使えるAPIを持っているので、
個人的にはソース綺麗になるなーなんて思っています。


Catalyst使ってもごちゃごちゃするのは自分のウデのせいですけどね。


Scaffordとか綺麗だしCakeは手抜き大好きプログラマの味方です。
Catalystはなんでも使える魔法の触媒ですが、柔軟すぎてその分コードが少し増えます。


でもCPANにある無数のモジュールを使えるので、
将来的にめんどくさい(自分で実装したくない)処理が求められそうなときは、こっちがいいかなと思います。


あと、R&D的な何するのかよく分からない自分用アプリ書くときはこれ使ってます。


毎回、アプリ作るときにどのWAF使うか悩みます。
先に言語決めろよという気もしますが。


今更だけどRailsとかも一回ちゃんと使ってみたいですね。


最近はもっぱらKohanaなんですが、
CatalystやCakeなどの歴史あるフレームワークは機能いっぱいで便利ですね。


使いどころと使い方しだいということでしょうか。