Pregunta

¿Quién tiene la responsabilidad


¿Quién tiene la responsabilidad de iniciar y terminar la unidad de trabajo en una arquitectura MVC?

¿Fue útil?

Solución

No es una responsabilidad de un controlador, viola SRP . Controlador ni siquiera debe saber sobre UoW en absoluto. En la web, uno UoW por la petición al servidor se utiliza normalmente. En este caso UoW debe desecharse al final de una petición y comenzó en algún lugar después del comienzo de una solicitud (lo ideal es comenzar de un UoW debe ser perezoso). El mejor lugar para hacerlo es Global.asax (o su clase HttpApplication) usando Application_EndRequest y manipuladores Application_BeginRequest.
Esto se puede lograr fácilmente con un marco COI (mi favorito es el de Windsor), ver esta pregunta para detalles de implementación.

Otros consejos

El controlador. Esto consigue el contexto, por lo que puede comenzar y terminar la unidad de trabajo. Por ejemplo, una sesión de NHibernate por la petición que tendría que saber cuando la solicitud se había iniciado y terminado, por lo que necesita el contexto para darle la solicitud.

Soy un creyente en la arquitectura de acoplamiento flexible. Mi controlador no sabe nada sobre el repositorio, contexto o UnitOfWork. He creado una capa de servicio (no estoy seguro de que es el término correcto) que el controlador de llama. Este servicio trabaja entonces con el repositorio (DLL) que persista todos los datos.

Como dijo zihotki estaría violando la SRP si se le da esta responsabilidad al controlador. Este es un patrón orientado a la manipulación de datos, y como tal no debe ser una preocupación para el controlador ... que harían dos violaciónes: uno para la SRP y anothrt el principio SoC

.

En cuanto a quién tiene la responsabilidad, eso es algo que debe ser definido por su arquitectura. La sugerencia StartRequest / EndRequest parece bastante sólido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top