首页 文章

具有多个传递通道的通知系统最合适的设计模式是什么?

提问于
浏览
0

我正在处理学生信息,我想根据某些系统事件发送通知 . 例如,当学生被标记为迟到或缺席时,应用程序将通知用户列表(父母,学校管理员等) . 此通知将使用所有可用方法(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 回答

  • 1

    我想到的是Observer Pattern . 希望有所帮助 .

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

相关问题