私は特定のシステムイベントに基づいて通知を送信する学生情報に取り組んでいます。たとえば、生徒が遅刻または不在のマークが付いている場合、アプリケーションはユーザーのリスト(親、学校管理者など)に通知します。この通知は、使用可能なすべてのメソッド(SMS、電子メール)を使用して送信され、メッセージを配信します。各メソッドは、その制約に基づいて通知をフォーマットします。ここで複数の配信チャネルを持つ通知システムに最も適した設計パターンは何ですか?
は、通知を生成しますいくつかのイベントのリストです:
- 割り当てが
- 学生は月 のための名誉のロール
- 皆勤を取得なっ合格点以下
- 平均滴を逃すマーク
私はメッセージと通知をSMSと電子メールで配信したいと思います。今後は、オープン/クローズの原則に違反することなく、新しい配送方法を追加したいと考えています。
同様の質問similar questionでも、このシステムを実装するためのデザインパターンについては何も言及していません。私もthis questionを調べましたが、私の問題は、各送信者のメソッドがカスタムメッセージを送信する必要があることです。
このシステムを実装して、新しい配信方法を追加し、各配信方法でその機能に基づいて通知/メッセージをフォーマットできるようにするにはどうすればよいですか?このシナリオで最も適用可能な設計パターンは何ですか? ファクトリパターンを使用して、すべての通知メカニズムのメッセージを作成する必要がありますか?ここで
は私のために心にすぐに来て何public class NotificationEmailMessage
{
public string ToEmail { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
public class NotificationSMSMessage
{
public string PhoneNumber { get; set; }
public string Message { get; set; }
}
public interface INotificationSender
{
void Send();
}
public class NotificationEmailSender : INotificationSender
{
public void Send()
{
System.Diagnostics.Debug.Write("Sending Email");
}
}
public class NotificationSMSSender : INotificationSender
{
public void Send()
{
System.Diagnostics.Debug.Write("Sending SMS");
}
}
public class NotificationMultiSender : INotificationSender
{
public List<INotificationSender> _senders;
public NotificationMultiSender()
{
_senders = new List<INotificationSender>();
}
public void Send()
{
_senders.ForEach(sender => sender.Send());
}
public void AddSender(INotificationSender sender)
{
}
}
私は送信者のフォーマットを盲目的にするのは貧しい選択だと思います。送信者の1人の制約が文字制限(50文字としましょう、たぶんそれがページャです)の場合はどうでしょうか?送信者はどのような文字をメッセージに含めるべきでしょうか?最初の50?それは、メッセージを伝えるのに理想的ではないかもしれません。私は、メッセージを書式化する責任が、特定のメッセージについて何かを知っている型に属するべきであると感じています。別の例として、送信者の1人がHTMLをサポートしていて、重要な単語を太字にしたいと思うかもしれません。そうするには、メッセージの知識が必要です。 – itsme86
@ itsme86これは私が解決できない問題の1つです。電子メールとSMSの場合は、どちらも別のメッセージが必要です。私はこのシナリオに最も適したパターンでは困難を抱えています。 –