假设有两个域实体:
域内需要以下功能:当应用层调用 UserImages - > addNewImage(), UserProfile - >如果它是空的,则会自动设置 mainImageId 。
那么,实现域内过度实体业务逻辑的最佳方式和最佳位置是什么?具有观察服务的域事件,引用来自实体的特殊服务,或者其他什么?
我使用某种工厂创建所有实体,即
$userImages = Domain::userImages($userId); // getting an instance of UserImages
$newImageId = $userImages -> addNewImage(); // adding a new image
我还应该提一下,我的项目中会有很多逻辑,如上所述。
非常感谢您的帮助!
答案 0 :(得分:0)
对我来说,用户听起来像聚合(很难在没有上下文的情况下给你一个意见:)),但它可以解决你的问题。
如果Profil和Images是不同的有界上下文,可能是你可以使用Domain事件(它对交叉有界上下文通信有帮助)
答案 1 :(得分:0)
首先,正如您other question中指定的那样,UserImages
本身并不是一个实体。相反,可能有一个名为UserImage
的实体,它引用用户的图像,单数。然后,UserImageRepository
可以在必要时使用分页提供对与用户关联的所有图像的访问。
现在,用例是:
当添加新用户图片时,如果未设置用户的个人资料图片, 将设置为添加的图片。
一词表示domain event。在这种情况下,事件为UserImageAdded
。粗体 if 和随后的设置表示响应事件所需的行为。
要实现此用例,必须在添加用户映像时发布事件,并且必须为实现所需行为的处理程序订阅此事件。此链接域事件文章提供了C#中的示例实现,但是该概念可以轻松移植到PHP。总的来说,所需的组件是:
UserImageAdded
事件并调用所需的行为。