2009-06-23 7 views
1

Ich integriere eine Mailingliste in ein bestehendes CMS in asp.net MVC.Wohin soll ich die Bestätigungs-E-Mail senden?

Ich muss eine Bestätigungs-E-Mail an den Abonnenten senden. Wohin soll ich es senden, vom Controller oder von der Serviceebene?

Erläuterung: Ich würde auf jeden Fall eine separate Service-Methode namens SendConfirmationEmail() erstellen. Die Frage ist, wer es den Controller nennt, der das Registrierungsformular bearbeitet, oder der Dienst, der die ausstehende Anfrage der DB hinzugefügt hat?

Offensichtlich kann ich es von beiden senden, aber das ist richtige MVC?

Antwort

3

Ich denke, der Standardansatz besteht darin, dass ein E-Mail-Dienst in den Controller eingefügt wird und der Controller nur den Dienstvorgang wie _emailService.Enqueue (myMessage) aufruft.

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(); 
    } 
} 

Einige der Vorteile sind:

  • Wiederverwendung: Wenn Sie die E-Mail-Funktionalität in einem anderen controller/action
  • Testbarkeit verwenden müssen: Sie können die E-Mail-Dienst in Einheit verspotten Tests, so dass Ihre Tests nicht auf einem SMTP-Server
  • verlassen können Sie Mailing-Implementierung ersetzen und anstelle der E-Mail senden direkt Warteschlange für async Senden
0

MVC fördert eine Trennung von Bedenken so Platzierung des Verhaltens innerhalb der Schichten alle über Adressieren der Sorge des Verhaltens. Da ich mit Ihrer Architektur nicht vertraut bin, weiß ich nicht, was Sie unter "Serviceebene" verstehen, aber da das Versenden von E-Mails wenig mit den Modellen, Ansichten oder Controllern Ihrer Website zu tun hat, würde ich Sie ermutigen, diese Funktionalität in eine Anwendung zu übertragen Schicht, wo es hingehört.

Wenn Ihre Service-Schicht in der Tat ist, und Anwendungsschicht dann würde ich den Code dort setzen.

Verwandte Themen