2010-09-22 10 views
19

En una aplicación web MVC, a menudo envío correos electrónicos.¿Debería el modelo o controlador ser responsable de enviar correos electrónicos?

Normalmente lo hago en el controlador, ya que cargo todas mis vistas desde el controlador (incluidas las vistas de correo electrónico).

Ahora, sin embargo, tengo un código que envía el correo electrónico desde el modelo.

¿De qué nivel se envía generalmente el correo electrónico? ¿Importa? ¿Es necesario para ser consistente?

+0

Bueno, depende, ¿el "usuario" envía un correo electrónico, luego ve una página de confirmación? Si es así, debe hacerse en el controlador (enviar correo electrónico, mostrar vista de confirmación). Si se trata de una cuestión de fondo/administración, el controlador debe llamar a un método en una capa de servicio, como se indica en la respuesta siguiente. – RPM1984

+1

Argumentaría que el envío real del correo electrónico aún debería hacerse en un servicio. El controlador debe crear una instancia del servicio, pasarle los datos, obtener una respuesta y luego llamar a la vista para procesar el paso a lo largo de los datos resultantes. –

Respuesta

16

Un controlador debería ser idealmente como un operador que conecta una vista a un modelo. Esto pertenece al modelo o a la capa de servicio.

Argumentaría que esto pertenece a la capa Modelo solo si tiene un objeto modelo que es el único responsable del envío de correos electrónicos. No desea combinar la presentación y la lógica, ese es el punto de separación de las preocupaciones en Model-View-Controller.

Este tipo de lógica debe residir en una capa de servicio. A continuación, puede usar la inyección de dependencia para inyectar el servicio en el controlador y llamar a EmailSenderService.sendEmail();

Cuestiones relacionadas