1

我想我在这个领域已经有一段时间了,但有时简单的事情会让你质疑自己......决定一个班级有什么责任,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 类型的类吗?如果不是,消息怎么知道如何发送自己?

4

5 回答 5

1

只需查看 .NET 框架本身,看看它是如何完成的,每个对象应该只有一个责任:

        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);
于 2011-11-11T20:36:24.257 回答
0

我想说第二个例子更好。什么消息与发送有关?寄到哪里?如何?这引发了太多的问题,这应该是第一个令人担忧的事情,这不是事情应该工作的方式。

另一方面,例如。MessagingSystem.SendToCustomerInbox(Message message)完美地说明了它的作用。向客户收件箱发送消息。我们在第一种情况下会问自己的所有问题都非常清楚。

消息本身更像是一种数据表示,而这将是它的唯一职责。与消息发送服务相同 - 它的职责就是发送消息,仅此而已。

于 2011-11-11T20:35:54.520 回答
0

可能不仅有黑色和白色,因此任何可能不是最佳且最适合每个人的混合方法在某些情况下可能会奏效,而在其他情况下会失败。

我开始的考虑是,如果消息只包含一些数据并且可以以不同的方式(异步、同步......)或通过不同的渠道(电子邮件、寻呼机、wcf、tcp、传真、语音......)发送,那么消息类的职责只是保存数据,并且会有类似的管理器MessagingManager或其他类知道要做什么以及如何处理消息,如何发送以及如何接收消息。

正如我所说,每个案例解决方案可能都没有完美或最好的解决方案。

于 2011-11-11T20:36:08.437 回答
0

大自然有解决办法。如果我们观察现实世界,消息(电子邮件、信件、短信……)不会自行发送,而是需要设备、控制器、管理器或实用程序才能发送出去。所以我想我会选择一个知道如何发送消息的控制器/管理器/实用程序类。

于 2011-11-11T20:36:32.853 回答
0

两种设计都很好,具体取决于您的要求。这是使用简单与解耦的问题

看看Active RecordData Mapper模式之间的区别。这与您的示例几乎相同。

于 2011-11-11T20:42:22.983 回答