私のドメイン モデルは、遅延読み込みの場合を除いて、それがどのように永続化されるかについて何も知りません。
プロパティを遅延ロードするには、少なくともファクトリの知識が必要です (このファクトリにはマッパーの知識があります)。実際に実行可能な代替手段は考えられません。ドメイン オブジェクトを監視可能にして、サービスに読み込みを行わせることもできるかもしれませんが、それはたいへんな労力であり、利益はほとんど得られません。
私は何が欠けていますか?
私のドメイン モデルは、遅延読み込みの場合を除いて、それがどのように永続化されるかについて何も知りません。
プロパティを遅延ロードするには、少なくともファクトリの知識が必要です (このファクトリにはマッパーの知識があります)。実際に実行可能な代替手段は考えられません。ドメイン オブジェクトを監視可能にして、サービスに読み込みを行わせることもできるかもしれませんが、それはたいへんな労力であり、利益はほとんど得られません。
私は何が欠けていますか?
わかりましたので、遅延読み込みプロパティが多値の場合 (99.9% のケース) のエレガントな解決策を見つけました。Daspirid の Web サイトhttp://site.svn.dasprids.de/trunk/application/にあります。(App_Model_Relation クラスを参照してください)。
基本的に、マッパーが構成オブジェクト (つまり、「1 対多」関係の「1」) を作成するとき、iteratorAggregate
インターフェースを実装するクラスを複数値フィールドに取り込みます。このオブジェクトの内側の反復子はコレクションですが、コレクションは必要な場合 (つまり__call()
、外側の反復子で呼び出された場合) にのみインスタンス化されます。
もう 1 つの有効な方法は、Matt Zandstra が著書「PHP Objects, Patterns, and Practice」(Apress) で説明しているように、「遅延コレクション」を使用することです。この場合、コレクションは、呼び出されたときに基になるデータを取得できるようにする PDO ステートメントで準備されます。
これで、私のモデルは永続性の詳細から完全に解放されます。ええええ!