2009-04-27 6 views
6

Ich verwende das MVC-Muster in ASP.NET mit Service (BLL) und Repository-Schichten für die Datenverwaltung. In einigen Fällen möchte ich eine automatische E-Mail senden, wenn eine neue Anfrage über unsere Website gesendet wird. In welcher Schicht der Architektur sollte diese E-Mail gesendet werden? In der Controller-Schicht oder der Service-Schicht? Ich dachte an die Service-Schicht, denn hier soll "Business-Logik" gehen, aber ich bin mir nicht 100% sicher, ob das semantisch korrekt ist.Soll ich E-Mails in der Service-Schicht oder in der Controller-Schicht senden?

Edit: Wenn ich "neue Anfrage" sage, meine ich, dass ein Benutzer eine Aktion ausführt, die in einer Art von Datenspeicher speichert. Als Beispiel erstellen sie ein neues "Projekt" auf der Website. Die Anforderung wird also über die Controller> Service> Repository-Schichten weitergeleitet.

Antwort

16

Einverstanden. Sie gehören in die Serviceebene. Der Controller sollte nur sehr dünn sein; Rufen Sie einfach die entsprechenden Geschäftsdaten/Daten/Klassen an und legen Sie die Daten in der übereinstimmenden Ansicht ab.

4

Ich würde es in der Service-Schicht bleiben.

5

Ich entwerfe meine Business-Schicht immer so, dass sie unabhängig vom Medium, über das die Daten dargestellt werden, arbeiten kann. Wenn ich zum Beispiel eine E-Mail senden soll, wenn ein neues Konto erstellt wird, möchte ich, dass dies unabhängig davon geschieht, ob der Benutzer das Konto über eine Website oder eine Desktop-Anwendung erstellt. In diesem Fall würde das Senden der E-Mail in der Business-Schicht erfolgen, da sie beiden Medien gemeinsam ist. Ich habe nur Controller-Aktionen in meinem Controller

1

an Mischung und pdc phill sagte in seinem Vortrag

thin controllers, fat models 
0

Eigentlich. Alle anderen Geschäftslogiken werden von einer anderen Schicht übernommen, egal welche.

5

In den meisten Fällen können Sie solche Probleme klären, indem Sie überlegen, was Sie tun möchten, wenn Sie anstelle Ihrer Web-App eine Web-Service-Schicht oder eine Windows-App vor Ihrem BLL haben. Möchten Sie immer noch möchten, dass die gleiche E-Mail ausgeht? Wenn die Antwort ja lautet, dann ist das Senden der E-Mail Teil Ihres Geschäftsmodells und sollte in die BLL gehen. Wenn die Antwort nein ist, dann ist das Senden der E-Mail wirklich Anwendungslogik und sollte in Ihrer App-Ebene erscheinen.

+0

Dies ist eine sehr schlaue Art, darüber nachzudenken ... Danke für den Tipp! –

0

Wenn es eine Kerngeschäftsfunktion ist, würde ich es in die Dienstschicht setzen.

Ich könnte jedoch eine "MailSender" -Klasse abstrahieren, so dass meine Serviceebene nicht explizit an das Senden von E-Mails in einer bestimmten Weise gebunden ist (z. B. mithilfe von System.Web.Mail). Möglicherweise möchten Sie später eine andere Methode verwenden (z. B. das asynchrone Senden von Nachrichten mithilfe von Warteschlangen). Es erlaubt Ihnen auch, Unit-Tests sicher zu testen, ohne irgendjemanden zu spammen (indem Sie MailSender durch einen ersetzen, der tatsächlich keine Mail sendet) :)

Verwandte Themen