0

假设有两个域实体:

  • 带有方法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

用户听起来像我的聚合(没有上下文很难给你一个意见:)),但它可以解决你的问题。

如果 Profil 和 Images 是不同的有界上下文,可能你可以使用域事件(它有助于跨界上下文通信)

于 2013-03-18T14:58:53.583 回答
0

首先,正如您在其他问题中所指定的那样,UserImages它本身并不是一个实体。相反,可能有一个实体称为UserImage,它指的是用户的图像,单数。然后, AUserImageRepository可以提供对与用户关联的所有图像的访问,在必要时使用分页。

现在,用例是:

添加新用户图片时,如果未设置用户头像, 则将其设置为添加的图片。

术语when表示域事件。在这种情况下,事件是UserImageAdded。粗体if和后续集合表示响应事件所需的行为。

要实现此用例,必须在添加用户图像时发布事件,并且必须为实现所需行为的处理程序订阅此事件。这篇链接的域事件文章提供了 C# 中的示例实现,但是可以轻松地将这个概念移植到 PHP。总体而言,所需的组件是:

  • 处理添加用户图像的应用程序服务。该服务将发布事件。
  • 由应用程序服务调用并允许发布者与订阅者分离的领域事件发布者。
  • 处理事件并调用所需行为的域事件处理程序。UserImageAdded
于 2013-03-18T20:02:08.590 回答