2009-06-23 122 views
1

我正在將一個郵件列表集成到asp.net MVC中的現有CMS中。我應該在哪裏發送確認電子郵件?

我需要向訂閱者發送確認電子郵件。我應該在哪裏發送它,控制器或服務層?

澄清:我肯定會創建一個名爲SendConfirmationEmail()的單獨服務方法。問題是誰將其稱爲處理註冊表單的控制器或將未決請求添加到數據庫的服務?

顯然我可以從兩者發送它,但這是適當的MVC?

回答

3

我猜標準的做法是有一個電子郵件服務注入到您的控制器和控制器只調用服務操作,如_emailService.Enqueue(myMessage)。

public class MyController 
{ 
    IEmailService _emailService; 

    public MyController(IEmailService emailService) 
    { 
     _emailService = emailService; 
    } 

    public ActionResult Email() 
    { 
     var myMessage = new MyMessage(); 

     // Initialize message here 

     _emailService.Enqueue(myMessage); 
     return View(); 
    } 
} 

一些好處是:

  • 重用:如果您需要在另一個 控制器/動作使用 電子郵件功能
  • 可測性:你可以在 單元嘲笑電子郵件服務測試,以便您的測試不依賴 在SMTP服務器上
  • 您可以替換郵件實現,而不是直接發送郵件隊列它爲異步發送
0

MVC鼓勵層內的分離的擔憂這樣的行爲放置所有關於解決行爲關注。由於我不熟悉你的架構,我不知道你的意思是什麼「服務層」,但由於發送電子郵件與你的網站的模型,視圖或控制器無關,所以我鼓勵你將這個功能轉移到應用程序中它屬於哪一層。

如果你的服務層實際上是應用層,那麼我會把代碼放在那裏。