在给出我的实体行为的问题后,我似乎偶然发现问题。
我有一个系统,当有人评论他的文章时,用户会收到通知。现在通过电子邮件发送。
我正在努力实现DDD方式。
选项1
用户实体具有Notify方法:User.Notify() 该方法使用C#内置类通过电子邮件发送电子邮件通知
在域中具有此问题的问题在于它是技术特定的,并且通知用户的方式将来可能会发生变化。我觉得这属于基础设施,但用户怎么能有行为?
选项2
我创建了一个服务:NotificationService.Notify(User) 该服务使用C#内置类发送电子邮件
专家认为该服务可以是一个应用服务,据我所知,应用服务可以使用基础设施并为此调用System.Net.Mail和存储库之类的东西。
你会如何实现这个?
答案 0 :(得分:3)
此操作似乎不是User实体的自然组成部分。此操作是无状态的。所以,在我看来,通知是服务的责任。
这不是域服务,因为它不涉及业务逻辑。通知服务从您的域(用户)抽象基础架构实现。通知可以使用电子邮件,MSMQ或将消息放入数据库。这不应该影响您的域模型。所以,这肯定是基础设施。
所以,我会选择2.基础设施服务。
PS考虑更多描述性方法名称NotifyCommentAdded