繁体   English   中英

对于具有多个交付渠道的通知系统,最合适的设计模式是什么?

[英]What is the most appropriate design pattern for a notification system with multiple delivery channels?

我正在处理学生信息,我想根据某些系统事件发送通知。 例如,当学生被标记为迟到或缺席时,应用程序将通知用户列表(家长、学校管理员等)。 此通知将使用所有可用的方法(短信、电子邮件)发送以传递消息。 每个方法负责根据其约束来格式化通知。

以下是将生成通知的一些事件的列表:

  • 作业标记为缺失
  • 平均下降到及格以下成为
  • 学生获得荣誉榜
  • 一个月的完美出勤

我希望使用短信和电子邮件发送消息/通知。 将来,我希望能够在不违反打开/关闭原则的情况下添加新的交付方式。

一个类似的问题类似的问题,但它没有提到实现这个系统的设计模式。 我也研究过这个问题,但我的问题是每个发件人方法都需要发送自定义消息。

我如何实现这个系统,以便它允许我添加新的交付方法并让每种交付方法根据其功能格式化通知/消息? 这个场景最适用的设计模式是什么? 我是否需要使用工厂模式为所有通知机制创建消息?

这是我到目前为止...

 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)
    {

    }
}

我立即想到的是观察者模式 希望有帮助。

编辑:您可以将消息发送与确定应发送哪些消息的逻辑分开。 为了提供我正在谈论的更具体的示例,请尝试在应该发送消息时触发事件。 然后您可以为每种消息发送类型添加事件订阅者。 确定何时需要发送消息的代码永远不需要更改,每次添加新类型时,只需添加一个新订阅者。

在这里,我将使用装饰器模式,它增加了很多与用户设置相关的灵活性,您可以发送电子邮件短信电报,因此每个发件人单独的装饰器也很容易在未来添加新的发件人,只需使用 send 方法实现装饰器接口

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM