我正在处理学生信息,我想根据某些系统事件发送通知 . 例如,当学生被标记为迟到或缺席时,应用程序将通知用户列表(父母,学校管理员等) . 此通知将使用所有可用方法(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 回答
我想到的是Observer Pattern . 希望有所帮助 .
编辑:您可以将发送的消息与确定应发送哪些消息的逻辑分开 . 为了提供我正在谈论的更具体的示例,请尝试在发送消息时触发事件 . 然后,您可以为每种邮件发送类型添加事件订阅者 . 确定何时需要发送消息的代码永远不需要更改,每次添加新类型时,只需添加新订户即可 .