對不起,這個問題會有點含糊,因爲我不完全確定我在找什麼。監控工作流程/狀態的電子郵件通知服務的設計模式
基本上在我的(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;
}
這些只是構成的例子,但我希望你明白了。
我真正想的是,我的所有通知規則都應該是自包含在某種可配置的notication類中,它基本上監視對象上的狀態變化並執行所需的任何操作,所以它的行爲就像插件到主應用程序並保持鬆耦合。同時,我不覺得我的底層數據對象應該像通知服務那樣依賴於某些東西,我認爲這應該插入到我的主控制器類中。
我真的不知道如何做到這一點,但我猜這肯定是一個普遍的問題。是否有我可以閱讀的特定設計模式來提供一些線索?有沒有人做過這樣的事情?我甚至正確地考慮這個問題?我對所有這些東西都很陌生,但試圖以正確的方式思考和編碼。