全部,我有一系列域对象(项目基于NHibernate)。目前,根据“良好实践”,他们仅定义业务对象,包括特定于域内每个对象功能的属性和方法。但是,其中一个对象需要发送SMTP消息。我在一个单独的“Utilities”程序集中定义了一个简单的SMTP客户端类。为了在POCO中使用此邮件客户端,我需要在域中保留对实用程序程序集的引用。我的疑问是......为了获得必要的业务功能,在POCO中保留这样的引用是否与最佳实践不同。
亲切的问候
Paul J。
答案 0 :(得分:0)
禁止抽象和使用依赖注入的代码,以避免引用。
public class PocoObject{
public PocoObject(IMailSender mailSender){
_mailSender=mailSender;
}
public void DoStuff(){
mailSender.Send(to,content,blabla);
}
}
但邮件发送类型不适合Domain。它似乎更像是应用程序服务。
答案 1 :(得分:0)
是的。发送SMTP消息听起来更像是业务规则而不是业务对象责任。您的业务对象是POCO,在大多数情况下,它仅表示数据而不表示行为。正如Arnis L.所说,在您的系统中提供管理邮件发送作业的服务会更好。