Wikipedia によると、ツボ(経穴)とは、『ツボと呼ばれ、「気と血」のエネルギーの通り道である経絡上に点在し、その経絡をつなぐ点のことである。鍼灸で施術することにより様々な作用を表わす』ものだそうです。フレームワークというのは、“プログラミングにツボを作る”システム、と言ってもいいかもしれません。
ある1箇所を調整するだけで、「全体に影響」を与えることができます。ですから、どこを調整するとどんな変化が起こるのか、その全体像をつかむことが大切です。
まず、CakePHP Framework には基本となる二つのディレクトリとして、
Cake: フレームワーク自体が入っているフォルダ
app: 自分のプロジェクトを入れるフォルダ
という二つがあります。そして重要なこととして、「この二つのフォルダ内の構成はかなり似ている」ということです。どういうことかというと、もし、Cakeフォルダ(フレームワーク本来の)コードを書き換えたい、修正したいと思った場合には、
「該当するファイルを Cake フォルダから App フォルダにコピーし、そのコピーしたものを自分用に修正してしまう」
という手法が使えるということです。Cakeは、同じ名前のファイルが app フォルダにあることに気がつくと、そちらのほうを実行します。
Cake フォルダ自体には手をふれずにすみますので、Cake の最新版が出た場合には、単に Cake フォルダだけを上書きするだけでよいかもしれません。
(テストは必要ですが。)誤って、せっかく自分の書いたコードを上書きしてしまった、という状況をなくすことができます。
もうひとつの“ツボ”アプローチは、“クラスの階層図”という観点から理解を深めることです。
Cake のすべてのクラスは、object クラス(libs\object.php)から派生しています。つまり、このクラスがすべての親となっていますので、ここに何か機能を書き込むと、Cake内のありとあらゆるクラスが同じ機能を持つようになります。
現在、ここに書いてあるメソッドには、
toString() …… クラス名を文字列で出力する
requestAction() …… コントローラのメソッドを呼ぶ
log() …… ログを取る
cakeError() …… エラー処理用
などがあります。これはどのCakePHPのクラスからでも呼べる基本的なメソッドです。
また、フレームワークの屋台骨となる、
AppController クラス(app_controller.php)
AppModel クラス(app_model.php)
があります。これらのファイルを cake フォルダから app フォルダ直下にコピーし、自分のメソッドを加えると、それぞれ、すべての“controller”クラス、また"model"クラスに同じ機能を追加することができます。
例えば、MYSQL 4.1 以上を利用している場合には、接続直後に、"SET NAMES テーブルの文字コード"という SQL を発行しないと、文字化けに見舞われることが多々あります。オープンソース開発であれば、自分の環境ではOKだからなにもしないというのではなく、「だれの環境でも動くように意識した開発」が大切なので、環境に応じてこうしたコードを実行するようにしておくなどの、気配りは大切かもしれません。
AppModel 内に一度、このSQLを発行するコードを書いておくと、あとは model クラスを新たに作るたびに親の性質を受け継いでいますので、子どもたちには何も手を加える必要がありません。
ということは、数百のファイルがある大きなプロジェクトであっても、一箇所を変更するだけで、アプリケーションのふるまいを変更できることになります。
これがどれだけの省力化とDRY(同じことを何度もしない!)に役立つかを体験すると、手放せなくなります……。
posted by SDozono at 11:22| ロサンゼルス ☀|
Comment(0)
|
TrackBack(0)
|
CakePHP Tips
|
|