Domain driven design 实体如何在域内相互连接?
假设有两个域实体:Domain driven design 实体如何在域内相互连接?,domain-driven-design,Domain Driven Design,假设有两个域实体: UserImages使用方法addNewImage(),removeImage($imageId),getImages($from,$count) UserProfile带有字段name、age、mainImageId等 域内需要以下功能:当应用程序层调用UserImages->addNewImage(),UserProfile->mainImageId为空时会自动设置 那么,实现域内实体业务逻辑的最佳方式和最佳位置是什么?使用观察服务、引用来自实体的特殊服务或其他方式的
- UserImages使用方法addNewImage(),removeImage($imageId),getImages($from,$count)
- UserProfile带有字段name、age、mainImageId等
$userImages = Domain::userImages($userId); // getting an instance of UserImages
$newImageId = $userImages -> addNewImage(); // adding a new image
我还应该提到,在我的项目中,我将有很多类似于上面描述的逻辑
非常感谢你的帮助 对我来说,用户听起来像是聚合(如果没有上下文,很难给出您的意见:),但它可以解决您的问题
如果Profil和Images是不同的有界上下文,可能您可以使用域事件(这有助于跨界上下文通信)首先,正如您在中指定的,
UserImages
本身不是一个实体。相反,可能存在一个名为UserImage
的实体,它引用用户的图像,单数。然后,UserImageRepository
可以提供对与用户关联的所有图像的访问,必要时使用分页
现在,用例是:
添加新用户图像时,如果未设置用户的配置文件图像,
将其设置为添加的图像
术语当表示。在这种情况下,事件是UserImageAdded
。粗体的if和随后的集合表示响应事件的所需行为
要实现此用例,必须在添加用户映像时发布一个事件,并且必须为该事件订阅一个实现所需行为的处理程序。这篇链接的域事件文章提供了一个C#的示例实现,但是这个概念可以很容易地移植到PHP。总体而言,所需组件包括:
- 处理用户图像添加的应用程序服务。此服务将发布事件
- 由应用程序服务调用的域事件发布程序,允许发布程序与订阅服务器分离
- 一个域事件处理程序,它处理
事件并调用所需的行为UserImageAdded