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 フレームワーク自体を調べて、それがどのように行われるかを確認してください。各オブジェクトには 1 つの責任のみを持たせる必要があります。

        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

2番目の例の方が良いと思います。送信に関係するメッセージは何ですか? どこに送る?どのように?これは非常に多くの疑問を引き起こしますが、それは物事がうまくいく方法ではないという最初の憂慮すべきことです。

一方、例えば。MessagingSystem.SendToCustomerInbox(Message message)それが何をするかを完全に述べています。顧客の受信トレイにメッセージを送信します。最初のケースで自問したであろうすべての質問は完全に明確です。

メッセージ自体はデータ表現のようなものであり、それが単一の責任になります。メッセージ送信サービスと同じです。その責任は、メッセージを送信することだけであり、それ以上でもそれ以下でもありません。

于 2011-11-11T20:35:54.520 に答える
0

おそらくそこには黒と白だけが存在するわけではないので、最適ではなく、すべての体に最適ではない可能性のある混合アプローチは、場合によっては機能し、他の場合には失敗する可能性があります.

私の最初の考慮事項は、メッセージに一部のデータしか含まれておらず、さまざまな方法 (非同期、同期など) またはさまざまなチャネル (電子メール、ポケットベル、wcf、tcp、ファックス、音声など) を介して送信できる場合、メッセージはクラスの責任はデータを保持することだけであり、MessagingManager何をすべきか、メッセージをどのように処理するか、どのように送信し、どのように受信するかを知っているようなマネージャまたは他のクラスがあります。

私が言ったように、おそらくすべてのケースの解決策に完璧または最善のものはありません。

于 2011-11-11T20:36:08.437 に答える
0

要件に応じて、どちらのデザインでも問題ありません。使い方のシンプルさとデカップリングの問題です

Active RecordData Mapperのパターンの違いを見てみましょう。あなたの例とほとんど同じです。

于 2011-11-11T20:42:22.983 に答える
0

母なる自然には解決策があります。現実の世界に目を向けると、メッセージ (電子メール、手紙、SMS など) はそれ自体を送信するのではなく、送信するためのデバイス、コントローラー、マネージャー、またはユーティリティが必要です。したがって、メッセージの送信方法を知っているコントローラー/マネージャー/ユーティリティ クラスを用意することにします。

于 2011-11-11T20:36:32.853 に答える