2006年07月28日

ディレクトリ構造2(つぼを知る)

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(同じことを何度もしない!)に役立つかを体験すると、手放せなくなります……。

directories.PNG

 











posted by SDozono at 11:22| ロサンゼルス ☀| Comment(0) | TrackBack(0) | CakePHP Tips | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
手(パー)To make a comment: Please type your name and comment. at the validation field box, type 'cakephp'. And there two glay buttons. "Preview"/"Submit". Thank you!
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。