0

addImage ( $imageId )、removeImage ( $imageId )、getImages ( $from, $count )などのメソッドを使用してエンティティUserImagesを実装しています。

物理的には、アプリケーション レベルのストレージに格納されたデータ (画像 ID のコレクション) であり、addItem ( $keyName, $item, $weight )、removeItem ( $keyName, $item )、getItems ( $key, $from, $count )。

UserImagesエンティティからストレージを参照せずに、DDDスタイルでモデルにこの外部(ドメインから見える)ストレージを使用させる方法は? 従来のアプローチが想定しているように、ストレージからエンティティにすべてのコレクションをロードしたくないことが重要です。

問題の適切な説明を提供できれば幸いです。そうでない場合はお知らせください。助けてくれてどうもありがとう。

4

2 に答える 2

5

UserImagesエンティティのようには聞こえませんが、すでに実装されているサービスまたはリポジトリのように聞こえます-アプリケーションレベルのストレージ。これを として公開したい場合があります。リポジトリUserImageRepositoryは、あなたが持っているものにより適切な名前です。より一般的には、関連付けの一方の端に非常に大きなカーディナリティがある可能性がある場合は常に、オブジェクトを直接参照する代わりに、この関連付けをリポジトリとして実装することを検討してください。エンティティと集合体は一貫性の境界である必要があり、それらが表す概念の完全な化身である必要はありません。また、このトピックの詳細については、Effective Aggregate Designを参照してください。

于 2013-03-18T15:57:05.367 に答える
0

まず、遅延読み込みは DDD のアンチパターンです。これが必要になるのは、エンティティが不変条件を維持するために必要以上のデータへのアクセスを提供する場合だけです。これに対処するには、代わりに共有識別子を使用できます。

ドメイン ロジックと永続性の問題を切り離すために、観察可能なエンティティを使用できます。エンティティを提供するリポジトリは、適切なドメイン イベントが発生したときに変更を永続化できるようにエンティティを監視し続けます。ただし、PHP でコーディングしている場合は、Observer パターンを手動でコーディングする必要があります。

于 2013-03-18T08:37:11.300 に答える