我想我已经在这个领域工作了很长一段时间,但有时简单的事情让你自己质疑......决定一个班级有什么责任,SRP,以及那种的事情。
因此,在消息系统的上下文中,是:
Message m = new Message();
// Some properties set
m.Send();
或
Message m = new Message();
// Some Message properties set...
MessagingSystem ms = new MessagingSystem();
ms.SendMessage(m);
您是否使用Controller / Manager类型的类?如果没有,消息如何知道如何发送自己?
答案 0 :(得分:1)
只需查看.NET框架本身,看看它是如何完成的,每个对象应该只有一个reponsiblity:
SmtpClient client = new SmtpClient();
MailAddress from = new MailAddress("jane@contoso.com", "Jane Clayton");
MailAddress to = new MailAddress("ben@contoso.com");
MailMessage message = new MailMessage(from, to);
message.Body = "This is a test e-mail message sent by an application.";
message.Subject = "Test message";
client.Send(message);
答案 1 :(得分:0)
我会说第二个例子更好。什么消息与发送有关? 发送到哪里?如何?这引发了太多的问题,这应该是首先令人担忧的事情,这不是事情应该如何运作的方式。
另一方面,例如。 MessagingSystem.SendToCustomerInbox(Message message)
完全表明了它的作用。将消息发送到客户收件箱。我们在第一种情况下会问自己的所有问题都非常清楚。
消息本身更像是一种数据表示形式,这将是它的唯一责任。与消息发送服务相同 - 它的职责是发送消息,仅此而已。
答案 2 :(得分:0)
可能不仅有黑色和白色,所以任何混合的方法可能不是最佳的,对每个身体都是最好的,在某些情况下可以起作用而在其他情况下不起作用。
我的开始考虑是,如果消息只包含一些数据,并且可以以不同的方式(异步,同步......)或通过不同的渠道(电子邮件,寻呼机,wcf,tcp,传真,语音...)发送然后消息类责任只是保存数据,并且会有像MessagingManager
这样的管理器或其他类,它们将知道如何处理消息,如何发送消息以及如何接收消息。
正如我所说,对于每个案例解决方案,可能都没有完美或最佳。
答案 3 :(得分:0)
大自然有解决方案。如果我们关注现实世界,消息(电子邮件,信件,短信......)不会自行发送,但需要设备,控制器,管理员或实用程序将其发送出去。所以我想我会找一个知道如何发送消息的控制器/经理/实用程序类。
答案 4 :(得分:0)
根据您的要求,两种设计都很好。这是一个简单易用与解耦的问题
只需看看Active Record和Data Mapper模式之间的区别。它与你的例子大致相同。