특정 시스템 이벤트를 기반으로 알림을 보내려는 학생 정보를 작성하고 있습니다. 예를 들어, 학생이 늦게 또는 부재 중으로 표시되면 신청서는 사용자 목록 (부모, 학교 관리자 등)에 알립니다. 이 알림은 사용 가능한 모든 방법 (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)
{
}
}
발신자 형식을 맹목적으로 만드는 것이 좋지 않은 선택이라고 생각합니다. 보낸 사람 중 하나의 제약 조건이 글자 수 제한 인 경우 (50 자 또는 어쩌면 호출기라고합시다!) 보낸 사람은 메시지에 어떤 문자를 포함 시킬지 어떻게 알 수 있습니까? 처음 50? 메시지를 전달하는 데 이상적이지 않을 수 있습니다. 메시지를 포맷하는 책임은 특정 메시지에 대해 알고있는 유형에 속해야한다고 생각합니다. 또 다른 예로, 발신자 중 한 명이 HTML을 지원하고 ** 중요 단어를 굵게 표시하려고합니다. 그렇게하기 위해서는 메시지 지식이 필요합니다. – itsme86
@ itsme86 이것은 해결할 수없는 문제 중 하나입니다. 전자 메일과 SMS의 경우에는 둘 다 다른 메시지가 필요합니다. 나는이 시나리오에 가장 적합한 패턴으로 어려움을 겪고있다. –