0

2 つのドメイン エンティティがあるとします。

  • メソッドaddNewImage ()removeImage ( $imageId )、getImages ( $from, $count ) を持つ UserImages。
  • nameagemainImageIdなどのフィールドを持つUserProfile 。

ドメイン内で次の機能が必要です。アプリケーション層がUserImages -> addNewImage()を呼び出すと、UserProfile -> mainImageIdが空の場合に自動的に設定されます。

では、ドメイン内のオーバーエンティティ ビジネス ロジックを実装するための最適な方法と最適な場所は何でしょうか? サービスの監視、エンティティからの特別なサービスの参照、またはその他のドメイン イベントはありますか?

ある種のファクトリを使用してすべてのエンティティを作成します。

$userImages = Domain::userImages($userId); // getting an instance of UserImages
$newImageId = $userImages -> addNewImage();   // adding a new image

また、私のプロジェクトでは、上記のような多くのロジックがあることにも言及する必要があります。

助けてくれてどうもありがとう!

4

2 に答える 2

0

まず、他の質問で指定されているように、UserImagesそれ自体はエンティティではありません。代わりにUserImage、単数形のユーザーの画像を参照するというエンティティが存在する可能性があります。UserImageRepositoryは、必要に応じてページネーションを使用して、ユーザーに関連付けられたすべての画像へのアクセスを提供できます。

さて、ユースケースは次のとおりです。

新規ユーザー画像を追加する、ユーザーのプロフィール画像が設定されていない場合は、追加画像に 設定してください。

whenという用語は、ドメイン イベントを示します。この場合、イベントはUserImageAdded. 太字のifとそれに続くセットは、イベントに応じた望ましい動作を表しています。

このユース ケースを実装するには、ユーザー イメージが追加されたときにイベントを発行し、目的の動作を実装するハンドラーをこのイベントにサブスクライブする必要があります。このリンクされたドメイン イベントの記事では、C# でのサンプル実装を提供していますが、概念は PHP に簡単に移植できます。全体として、必要なコンポーネントは次のとおりです。

  • ユーザー画像の追加を処理するアプリケーション サービス。このサービスは、イベントを公開します。
  • アプリケーション サービスによって呼び出され、サブスクライバーからパブリッシャーを切り離すことができるドメインイベント パブリッシャー。
  • イベントを処理し、目的の動作を呼び出すドメインイベント ハンドラー。UserImageAdded
于 2013-03-18T20:02:08.590 に答える
0

User は私にとって Aggregate のように聞こえますが (コンテキストなしで意見を述べるのは難しいです:))、問題を解決できます。

プロファイルと画像が異なる境界付けられたコンテキストである場合、ドメイン イベントを使用できる可能性があります (クロス境界付けられたコンテキスト通信に役立ちます)。

于 2013-03-18T14:58:53.583 に答える