Извините, этот вопрос будет немного расплывчатым, потому что я не совсем уверен, что я ищу.
В основном в моем (Asp.net MVC) веб-приложении у меня есть некоторыебазовый (кодированный вручную) рабочий процесс, запускаемый различными пользовательскими вводами.
Мне нужно отправлять настраиваемые уведомления по электронной почте, когда происходят определенные события.
Например, в контроллере есть метод обновления состояния,который я мог бы написать примерно так:
public ActionResult UpdateStatus(int id, Status status)
{
Orders order = _orders.GetById(id);
order.Status = status;
if (status = Status.AwaitingApproval)
{
SendAwaitingApprovalNotification(_roles.GetApproverForDept(order.Department));
}
else if (status = Status.Approved && order.Department = someDept) { ... }
else if (status = Status.Approved && order.Department = someOtherDept) { ... }
else if // ... etc
}
Как видите, все это очень быстро запутается.Кроме того, логика для того, когда / какие уведомления отправляются, кодируется в контроллер, что мне не подходит.
Кроме того, существуют различные другие действия, которые могут изменять состояние без специального вызова UpdateStatus
метод.например,
public ActionResult ChangeOrderCost(int id, decimal newCost)
{
Orders order = _orders.GetById(id);
order.Cost = newCost;
order.Status = Status.AwaitingCustomerApproval;
}
Это только выдуманные примеры, но я надеюсь, что вы поняли.
Я действительно думаю, что все мои правила уведомлений должны быть в некотором роде самостоятельными.настраиваемого класса уведомлений, который в основном отслеживает изменения состояния моего объекта и делает все, что ему нужно, поэтому он действует как плагин для основного приложения и поддерживает слабую связь.В то же время я не думаю, что мои базовые объекты данных должны зависеть от таких вещей, как службы уведомлений, я думаю, что это должно подключиться к моим основным классам контроллеров.
Я не могудействительно думаю, как этого добиться, но я предполагаю, что это должно быть общей проблемой.Есть ли конкретный шаблон дизайна, на котором я могу прочитать некоторые подсказки?Кто-нибудь делал что-то подобное раньше?Я даже правильно думаю об этой проблеме?Я довольно новичок во всем этом, но пытаюсь думать и кодировать правильно.