2009-04-27 35 views
6

Estoy usando el patrón MVC en ASP.NET usando el servicio (BLL) y las capas de repositorio para la gestión de datos. En algunos casos, deseo enviar un correo electrónico automático cuando se envía una nueva solicitud a través de nuestro sitio web. ¿En qué capa de la arquitectura debe enviarse este correo electrónico? En la capa de controlador o la capa de servicio? Estaba pensando en la capa de servicio, ya que es donde se supone que debe ir la "lógica de negocios", pero no estoy 100% seguro de si eso es semánticamente correcto.¿Debo enviar correos electrónicos en la capa de servicio o en la capa de controlador?

Editar: Cuando digo "nueva solicitud" me refiero a que un usuario realiza una acción que se guarda en algún tipo de almacén de datos. Como ejemplo, crean un nuevo "Proyecto" en el sitio web. Entonces la solicitud pasará a través del controlador> servicio> capas de repositorio.

Respuesta

16

De acuerdo. Pertenecen a la capa de servicio. El controlador debe solo ser muy delgado; simplemente llamando a las clases correspondientes de negocios/datos/lo que sea y dejando caer los datos en la vista coincidente.

4

Me gustaría pegarlo en la capa de servicio.

5

Siempre diseño mi capa de negocio para que sea capaz de funcionar independientemente del medio a través del cual se presentan los datos. Entonces, por ejemplo, si tuviera que enviar un correo electrónico cuando se crea una nueva cuenta, me gustaría que esto ocurra independientemente de si el usuario está creando la cuenta a través de un sitio web o una aplicación de escritorio. En ese caso, el envío del correo electrónico ocurriría en la capa de negocios porque es común para ambos medios.

1

en la mezcla y Phill PDC dijo en su charla,

thin controllers, fat models 
0

En realidad acabo de acciones del controlador en mis controladores. El resto de la lógica de negocio se ocupa de otra capa, sea lo que sea.

5

La mayoría de las veces puede aclarar problemas como este pensando en lo que le gustaría que ocurra si tuviera una capa de servicio web o una aplicación de Windows en su BLL en lugar de su aplicación web. ¿Seguirías deseando que salga el mismo correo electrónico? Si la respuesta es sí, enviar el correo electrónico es parte de su modelo de negocio y debe ir en el BLL. si la respuesta es no, entonces el envío del correo electrónico es realmente una aplicación lógica y debe ir en la capa de su aplicación.

+0

Esta es una manera muy inteligente de pensarlo ... ¡gracias por la sugerencia! –

0

Si se trata de una función comercial básica, la pondría en la capa de servicio.

Sin embargo, puedo resumir una clase de "MailSender" para que mi capa de servicio no esté explícitamente ligada al envío de correo electrónico de una manera particular (por ejemplo, usando System.Web.Mail). Es posible que desee utilizar otro método más adelante (por ejemplo, enviar correo asíncrono utilizando colas). También le permite probar la unidad de manera segura sin enviar correo basura a nadie (reemplazando MailSender por uno que no envía ningún correo) :)

Cuestiones relacionadas