在这个问题中,有人回答“你永远不要让域对象实现自己调用服务!”。这个声明是 DDD 的硬性规则还是取决于您自己的应用程序和架构?
人为的例子:
例如,假设我们UserImage
的模型中有一个对象,该对象由用户从上传的图像中填充。然后假设我们可以将此图像提交给第 3 方服务,该服务可以识别指纹并Guid
在找到匹配项时返回 a。
public IThumbPrintService {
Guid FindMatch(Bitmap image);
}
public class UserImage {
public Bitmap Image {get; set;}
public Guid ThumbPrintId {get; set;}
public bool FindThumbPrintMatch() {
// Would you call the service from here?
ThumbPrintId = _thumbPrintService.FindMatch(this.Image);
return ! ThumbPrintId.CompareTo(Guid.Empty);
}
}
public class RoboCopUserImageService : IUserImageService {
// Or move the call to a service method
// since it depends on calling a separate service interface
public bool FindThumbPrintMatch(UserImage userImage) {
userImage.ThumbPrintId = _thumbPrintService.FindMatch(userImage.Image);
return !userImage.ThumbPrintId.CompareTo(Guid.Empty);
}
}
不让域对象自己调用服务可以避免或获得什么?
编辑:有没有讨论这个特定主题的好的在线文章?