2016-06-27 2 views
0

Doctrineとは正反対のネイティブORMをプラスしたりマイナスしたりできますか?ZF2:TableGatewayとDoctrine2

ZF1は私(Zend_Db_TableZend_Db_Table_Row)のために非常にproger-fiendlyネイティブORMを持っていた、Zend\Db\TableGateway\TableGatewayZend\Db\RowGateway\RowGatewayはこれを続けています。かさばる主な理由にもかかわらず、ほとんどの人がDoctrine2を使用しようとするのはなぜですか?

P.S. "リポジトリ"という単語でさえ、私のためのデータベースとは関連していません。

+1

ZF1とZF2の両方が、使い慣れたアダプタテーブルと行テーブルゲートウェイパターンを使用してデータベースの抽象化を実装しているので、実際に比較することはできません。 Doctrine 2のようにオブジェクトリレーショナルマッパー(ORM)を提供していません** – AlexP

+0

しかし最後のサンプルはhttp://framework.zend.com/manual/current/en/modules/zend.dbで説明しています。 table-gateway.html - アクティブなレコードのセットを取得します。 TableGatewayにSetクラスを手動で置くことができるので、ActiveRecordクラスを操作できます。セットを選択するアダプタを選択できます。なぜこれはORMではないのですか? –

+0

'エンティティ'を使いたい場合は、Doctrineを選択してください。それ以外の場合は、 'Entity'の依存関係を扱うために何かを作成/書き込みする必要があります。もちろん、TableGatewayのコードもたくさんあります。 – newage

答えて

0

まずは2つの定義から始めましょう。

データベース抽象化レイヤ(DBAL):データベース接続(ドライバー+ プラットフォーム)の上に座って、最も人気のあるリレーショナルデータベースと を通信するための直感的で柔軟なAPIを提供しています層。

オブジェクト・リレーショナル・マッピング(ORM):オブジェクト指向のパラダイムを使用してデータベースからデータを問合せし、 を操作できるようにする技法です。 このパラダイムは操作(水和およびデータベースのトランザクションなど) 維持との 正確性と一貫性を保証するために実行する必要があります知っているために、あなたのEntities(データオブジェクト)の 状態を追跡するためにUnit of Workを含める必要がありますそのライフサイクル全体にわたるデータ。また、パラダイムではデータの整合性を保つためにオブジェクトの関係も考慮する必要があります。これらの要素は、ORM実装の重要な側面です。

したがって、Zend\Dbは、抽象レイヤーであるため、ORM機能を提供しません。あなたはハイドレーターとZend\Db\ResultSet\HydratingResultSetを使って1つを作ってから、あなた自身の作業ユニットを作成してみることができます。 Ralph Schindlerが作成したコードがこの道を歩いているのを見たことがあります(コードはかなり印象的でしたが、ORM自体ではありませんでした)。あなたが同じ道路を下ることに決めたなら、あなたはあなたのために仕事を減らすでしょう... DoctrineのORMを使用することは間違いなく簡単です!

は最後に、Zend\Db\TableGateway\TableGatewayZend\Db\RowGateway\RowGatewayは、既知のソフトウェアパターン( - Design Patternsと混同しないように、それぞれTableGatewayパターンとアクティブレコードのパターンを、)を使用して設計しました。しかし、これは(作業単位パターンのような)エンタープライズアプリケーションアーキテクチャ(EAA)のパターンとは何の関係もありません。 EAAパターンの詳細については、Martin Fowlerの書籍エンタープライズアプリケーションアーキテクチャのパターンをご覧ください。