2010-09-22 64 views
19

在MVC Web應用程序中,我經常發送電子郵件。模型或控制器是否應負責發送電子郵件?

我通常在控制器中執行它,因爲我從控制器(包括電子郵件視圖)加載所有視圖。

然而,現在,我有一些代碼從模型發送電子郵件。

哪一層電子郵件通常發送?有關係嗎? 需要才能保持一致嗎?

+0

嗯,這取決於,「用戶」發送電子郵件,然後看到一個確認頁?如果是這樣,它應該在控制器中完成(發送電子郵件,顯示確認視圖)。如果是背景/管理事件,控制器應該調用服務層中的方法,如下面的答案所述。 – RPM1984 2010-09-22 01:03:32

+1

我認爲電子郵件的實際發送仍應在服務中完成。控制器應該實例化服務,將數據傳遞給它,獲取響應,然後調用視圖以渲染傳遞的結果數據。 – 2010-09-22 01:05:27

回答

16

控制器理想情況下應該像連接視圖和模型的操作符。這或者屬於模型或服務層。

我會爭辯說,只有在您有一個模型對象完全負責發送電子郵件時,它才屬於模型層。您不想將表現和邏輯混爲一談,這就是模型 - 視圖 - 控制器中關注問題的完整點。

這種類型的邏輯應該駐留在服務層中。然後,您可以使用依賴注入將服務注入控制器並調用EmailSenderService.sendEmail();

相關問題