Zend Framework で Web アプリケーションを開発しています。ドキュメントにはそれが書かれています...
「ただし、大規模なシステムではテーブル データ ゲートウェイ パターンが制限になる可能性があることに注意してください。」
- Table Data Gateway を使用することの欠点は何ですか?
- Zend でデータベースを処理する最も適切な方法は何ですか?
Zend Framework で Web アプリケーションを開発しています。ドキュメントにはそれが書かれています...
「ただし、大規模なシステムではテーブル データ ゲートウェイ パターンが制限になる可能性があることに注意してください。」
Table Data Gateway を使用することの欠点は、複雑なクエリの記述が制限される可能性があることです。などのカスタム クエリUNION
、SUB QUERY
およびWHERE
などの句を使用する
WHERE A OR (B AND C) OR D
複雑なクエリを作成する最善の方法は、複雑なクエリを手動で作成することです。したがって、それらを実行する最良の方法は、Zend_Db_Adapter
ZF2 には、Data Mapper のようなものがありました (この回答を見ることができます: Data Mapper、Table Data Gateway (Gateway)、Data Access Object (DAO)、および Repository パターンの違いは何ですか?
しかし、ZF2 を使用している場合、この問題は解決されており、データベースと通信する最も効率的な方法は、定義された ResultSetPrototype (exchangeArray 関数を持つモデルの 1 つとして) を持つ TableGateway であり、Zend/Db/Adapter クラスを介してここにある方法のサンプルです。 ZF2:
SERVICE.CONFIG:
'Gallery\Model\AnythingListTable' => function($sm) {
$tableGateway = $sm->get('AnythingListTableGateway');
$table = new AnythingListTable($tableGateway);
return $table;
},
'AnythingListTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Anything());
return new TableGateway('Anything', $dbAdapter, null, $resultSetPrototype);
},
AnythingTable は 1 つのモデル (データベースを操作する関数を含む)