Я в процессе внедрения службы уведомлений. По сути, клиенты могут получать уведомления несколькими способами, например, по электронной почте, текстовым сообщениям, факсу и т. Д. Ниже приведена грубая реализация, которая не связана друг с другом.
public class NotificationService
{
private readonly INotification _notification;
private readonly INotificationFormatter _formatter;
public NotificationService(
INotificationMethod notification,
INotificationFormatter formatter)
{
_notification = notification;
_formatter = formatter;
}
public void Notify(SomeParameterObject obj)
{
var formattedMessage = _formatter.Format(obj);
_notification.SendNotification(formattedMessage);
}
}
public interface INotificationFormatter
{
NotificationMessage Format(SomeParameterObject obj);
}
public interface INotification
{
void SendNotification();
}
public EmailNotification : INotification
{
public void SendNotification(NotificationMessage message)
{
// Use Exchange Web Services to send email
}
}
Класс NotificationService
по существу принимает метод уведомления и форматер. Очевидно, что каждый метод уведомления требует различного форматирования.
На основании бизнес-критериев, как выбрать, какую реализацию INotification
и NotificationFormatter
я хочу использовать? Обратите внимание, что в течение срока действия пользователя, использующего приложение, наиболее вероятно будет использоваться каждое уведомление. Я говорю это потому, что это не так просто, как указание моему контейнеру внедрить реализацию Foobar
, поскольку это изменится, когда пользователь использует приложение.
Я думал о создании какого-то класса, который мог бы обрабатывать пары, потому что мне кажется, что вы не захотите использовать средство форматирования уведомлений для текстовых сообщений для уведомления по факсу. Тем не менее, я не могу обернуться вокруг приличной реализации этого.
Мне также принадлежит книга «Инъекция зависимостей в .NET» Марка Симанна Возможно, я что-то упустил очевидное?
Спасибо.