9

Alejandro Gervasio の優れた Service Layers シリーズ ( http://www.devshed.com/cp/bio/Alejandro-Gervasio/ ) を読んでいて、彼がhttp: //www.devshed.com/c/a/PHP/PHP-Service-Layers-Handling-Entity-Collections/1/

何故ですか?配列自体を使用して単純な連想配列をシミュレートするクラスを作成するのはなぜですか?

4

2 に答える 2

10

私は記事を読んでいませんでしたが、一般的に言えば、なぜ私がそれを行うのかを説明できます。

  1. 検索/並べ替え/アクセス: 特別なメソッドを使用してデータベースにアクセスしたり、単一の配列キーに依存したりすることなく、コレクション内の必要なアイテムの検索、フィルタリング、およびアクセスを抽象化できます。
  2. Entity または EntityCollection インターフェイスを渡すことができれば、エンティティ管理インターフェイスに簡単にプラグインできます。ここでも、複数のエンティティに対して操作を実行するための機能をコレクションにカプセル化できます。これをループで実行できないわけではありませんが、それを隠して、さまざまなコレクション クラスに対して特定のことを行うことができます)。
  3. コレクションのシリアライゼーション - 特定の文字列形式へのシリアライゼーションのためのカスタム シリアライゼーション (特定の属性を選択することを考えてください)。
  4. 基本的なアクセスと反復のための配列インターフェイスを簡単にサポートできます。
于 2012-04-08T21:14:39.677 に答える
1

Doctrine 2で観察したことで答えを完成させることができれば:

Doctrine では、Collectionインターフェースを使用するだけで、それがどのように機能するかは気にしません。インターフェイスは、フィルタリング、ソートなどのメソッドを提供します。

しかし、Doctrine はCollectionnamedの実装を提供しますPersistentCollection。インターフェイスを使用しているため、使用していることさえわかりませんが、この特別なコレクションを使用すると、Doctrine はコレクションをフィルター/検索/ソートするときに、インテリジェントかつ透過的にデータベース クエリを作成できます。また、Doctrine がコレクションのコンテンツ (オブジェクトのリスト) を、アクセスされたとき (遅延ロード) にのみロードできるようになり、パフォーマンスの向上に役立ちます。

これは PHP 配列では不可能であり、データベースから完全にロードしてから操作を実行する必要があります。

于 2012-11-23T10:14:00.410 に答える