我正在处理学生信息,我希望根据某些系统事件发送通知。例如,当学生被标记为迟到或缺席时,应用程序将通知用户列表(父母,学校管理员等)。此通知将使用所有可用方法(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)
{
}
}
答案 0 :(得分:1)
我想到的是Observer Pattern。希望有所帮助。
编辑: 您可以将发送的消息与确定应发送哪些消息的逻辑分开。为了提供我正在谈论的更具体的示例,请尝试在发送消息时触发事件。然后,您可以为每种邮件发送类型添加事件订阅者。确定何时需要发送消息的代码永远不需要更改,每次添加新类型时,只需添加新订阅者。
答案 1 :(得分:0)
在这里我将使用装饰器模式,它增加了很多与用户设置相关的灵活性,您可以发送电子邮件短信电报,因此每个发件人单独的装饰器也很容易在未来添加新的发件人,只需使用 send 方法实现装饰器接口