Zendのすべてのテーブルは、独自のクラスにマップする必要がありますか?

orm php zend-framework
Zendのすべてのテーブルは、独自のクラスにマップする必要がありますか?

すべてのモデルがテーブルであることを示唆しているわけではありません。

私が尋ねているのは、Zendを使用するときに、すべてのテーブルに固有のクラスを定義する必要があるかどうかです。 この厄介なボイラープレートコーディングから逃れる方法はありますか。 Zendを調べ始めたところです(手続き型PHPの土地を離れることを望んでいます!)、私の同僚は、これはかなり時間がかかる可能性があると考えています。

これがORMソリューションを使用する人々の理由ですか? これを回避する方法は他にありますか。

お返事ありがとうございます。

  4  1


ベストアンサー

Zend Tableクラスは、定義により、http://martinfowler.com/eaaCatalog/tableDataGateway.html [Table Data Gateway]パターンに従います。

_
. 単一のテーブルまたはビューにアクセスするためのすべてのSQLを保持します:選択、
挿入、更新、および削除。 他のコードは、データベースとのすべての対話のためにメソッドを呼び出します。
_

http://martinfowler.com/books.html#eaa [本の中]、http://en.wikipedia.org/wiki/Martin_Fowler [Fowler]はそれについてそれほど厳格ではない、と言っている

_
非常に単純なケースでは、すべてのテーブルのすべてのメソッドを処理する単一のTDGを使用できます。 ビューとして、またはデータベースにビューとして保持されていない興味深いクエリに対しても、1つ持つことができます。
_

ただし、ビューを使用できることを除いて、 `Zend_Db_Table`はこれに対応していません。 複数のテーブルへのクエリを作成できますが、それらは `Zend_Db_Adapter`を介して直接作成する必要があります-結合を使用する場合は、整合性チェックをオフにする必要があります。 そうでない場合は、 `Zend_Db_Table Relationships`によって提供されるAPIを使用する必要があります

そのため、1つのインスタンスが1つのテーブルまたはビューに対応する必要があります。 クラスを拡張する予定がない場合でも、そのためのクラスを作成する必要はありません。 http://framework.zend.com/manual/en/zend.db.table.definition.html [Zend_Db_Table_Definitions]を使用すると、その場で` Zend_Db_Table`インスタンスを設定できます。

TDGはデータソースアーキテクチャパターンであり、オブジェクトリレーショナルパターンではないことに注意してください。 その目的は、http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch [impedance-mismatch]を支援することではなく、データベースアクセスコードをビジネスロジックから分離することです。

7


タイトルとURLをコピーしました