DDD:MailService.SendNotificationToUser()或User.Notify()?

时间:2012-03-21 17:26:25

标签: c#-4.0 domain-driven-design

在给出我的实体行为的问题后,我似乎偶然发现问题。

我有一个系统,当有人评论他的文章时,用户会收到通知。现在通过电子邮件发送。

我正在努力实现DDD方式。

选项1

  

用户实体具有Notify方法:User.Notify()   该方法使用C#内置类通过电子邮件发送电子邮件通知

在域中具有此问题的问题在于它是技术特定的,并且通知用户的方式将来可能会发生变化。我觉得这属于基础设施,但用户怎么能有行为?

选项2

  

我创建了一个服务:NotificationService.Notify(User)   该服务使用C#内置类发送电子邮件

专家认为该服务可以是一个应用服务,据我所知,应用服务可以使用基础设施并为此调用System.Net.Mail和存储库之类的东西。

你会如何实现这个?

1 个答案:

答案 0 :(得分:3)

此操作似乎不是User实体的自然组成部分。此操作是无状态的。所以,在我看来,通知是服务的责任。

这不是域服务,因为它不涉及业务逻辑。通知服务从您的域(用户)抽象基础架构实现。通知可以使用电子邮件,MSMQ或将消息放入数据库。这不应该影响您的域模型。所以,这肯定是基础设施。

所以,我会选择2.基础设施服务。

PS考虑更多描述性方法名称NotifyCommentAdded