page_adsence

2010年7月27日火曜日

doctrineで生成されるBase~.class.phpと~.class.phpと~Table.class.phpの棲み分けについて

doctrineでmodelを生成すると1つのテーブルに対して以下の3ファイルが生成されます。

例)テーブル名がhogeだった場合に作成されたモデルクラスの場合

base/BaseHoge.class.php
Hoge.class.php
HogeTable.class.php

これらのファイルにはそれぞれ違った役割があり、
それを意識することで綺麗なコードが書けるようになると思います。

BaseHoge.class.phpに関して
こちらはbuildするたびに書き換えられてしまうので、触らないようにしましょう。
もし修正してもbuild-modelのコマンドを実行した時点で新しいファイルに差し替わってしまいます。

HogeTable.class.phpに関して
このクラス内ではテーブルからレコードを取得する処理を記述する。
ようは、テーブルに対して行う処理に関しては全てここに記述する。

Hoge.class.phpに関して
HogeTable.class.phpで取得したレコードに対して処理を実行する場合はこちらに記述する。
つまり、テーブルにレコードを直接取得するような記述は書かない。
あくまでHogeTable.class.phpで取得してきた取得結果に対しての処理を記述するのがこっち。

以上が棲み分けになる。
なぜこのようになるかというのは、継承関係が以下のようになっているからってことみたいです。
・Doctrine_Record > sfDoctrineRecord > Hogeクラス
・Doctrine_Table > HogeTableクラス

・参考文献
http://www.kazu.tv/blog/archives/000954.html