我想知道您對以下設計方案的看法。設計問題 - 使用事件,屬性還是不是? (mvc)
我有一個'AgendaController'(.NET MVC項目),它處理用戶操作,如查看他們的議程,約會等等。當用戶進行預約時,約會被保存在數據庫中。然後,必須完成一項「次要」任務,在這種情況下,向用戶發送消息(無論是短信,電子郵件還是其他不相關的內容)。我可以用三種不同的方式實現這一點:
我可以簡單地在控制器動作直接添加一個電話,像
messageService.SendNewAppointmentMessage(data)
。我想,這很好,雖然它確實讓控制器的操作變得混亂了一點。具體來說,如果由於某些未來的需求需要做某些其他操作(例如,日誌記錄雖然不是一個好例子),但我還是會再次調用某個記錄器類。我可以在AgendaController中聲明一個靜態事件
OnAppointmentMade
,並創建訂閱此事件的MessageService。然後,當約會被保存時,事件被觸發,並且實際的消息發送被處理在別的地方。如果這些要求出現,我可以有更多的課程訂閱這個活動。這樣,控制器動作保持非常乾淨,所有的「次要任務」都在其他地方執行。我可以在控制器動作
[SendNewAppointment]
上使用自定義屬性,並在該屬性的OnActionExecuting
方法中發送消息。這很好地遵循MVC設計我猜,但我不一定喜歡屬性混亂:我會有一個Authorize
,AcceptVerbs
,ActionName
,SendNewAppointment
等etc屬性在一個單一的控制器操作。
哪個設計是首選?哪一個肯定是不行?我對第二個設計略有偏好,但我不知道是否應該(事實上)使用這個事件。我真的很想聽聽你的意見!
我沒有看到你如何訂閱在控制器內部引發的事件。你需要控制器的實例。你會在哪裏執行它? – 2009-07-01 13:52:29
這是一個靜態事件。所以我只能說:AgendaController.OnNewAppointment + = MyEventHandler。 – Razzie 2009-07-01 14:49:48