2010-09-22 8 views
19

In un'applicazione Web MVC, invio spesso e-mail.Il modello o il controller dovrebbe essere responsabile per l'invio di e-mail?

Di solito lo faccio nel controller, mentre carico tutte le viste dal controller (incluse le viste e-mail).

Ora, tuttavia, ho un codice in cui l'e-mail invia dal modello.

Da quale livello viene generalmente inviata la posta elettronica? Importa? Lo ha bisogno di per essere coerente?

+0

Beh, dipende, l'utente invia un'email, quindi visualizza una pagina di conferma? Se è così, dovrebbe essere fatto in Controller (invia e-mail, mostra vista di conferma). Se si tratta di una cosa di background/admin, il controller dovrebbe chiamare un metodo in un livello di servizio, come indicato nella risposta seguente. – RPM1984

+1

Direi che l'invio effettivo dell'email dovrebbe ancora essere fatto in un servizio. Il controller dovrebbe creare un'istanza del servizio, passare i dati ad esso, ottenere una risposta e quindi chiamare la vista per eseguire il rendering dei dati risultanti. –

risposta

16

Un controller dovrebbe idealmente essere come un operatore che collega una vista a un modello. Questo appartiene al modello o al livello di servizio.

Direi che questo appartiene al livello Modello solo se si dispone di un oggetto modello che è l'unico responsabile per l'invio di e-mail. Non si desidera sottoporre la presentazione e la logica, questo è l'intero punto di separazione delle preoccupazioni in Model-View-Controller.

Questo tipo di logica deve risiedere in un livello di servizio. È quindi possibile utilizzare dependency injection per iniettare il servizio nel controller e chiamare EmailSenderService.sendEmail();

Problemi correlati