2009-06-23 6 views
1

私はasp.net MVCの既存のCMSにメーリングリストを統合しています。どこから確認メールを送信すればよいですか?

私は契約者に確認メールを送信する必要があります。どこから送信するのですか、コントローラーか、サービス層ですか?

明確化:私は間違いなくSendConfirmationEmail()と呼ばれる別のサービスメソッドを作成します。問題は、登録フォームを処理しているコントローラ、または保留中のリクエストをDBに追加したサービスを誰に呼び出すのかです。

明らかに私は両方から送信できますが、どちらが適切な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はすべての行動の懸念に対処についての層内関心事の分離ので、行動の配置を奨励しています。私はあなたのアーキテクチャーに慣れていないので、私はあなたが "サービス層"の意味を理解していませんが、電子メールを送信することはあなたのウェブサイトのモデル、ビュー、またはコントローラーとほとんど関係がないので、それが所属する層。

サービスレイヤーが実際にはアプリケーションレイヤーであれば、そこでコードを配置します。

関連する問題