2010-02-10 14 views

Respuesta

10

No es responsabilidad del controlador, infringe SRP. El controlador ni siquiera debería saber sobre UoW. En la web, generalmente se utiliza una UoW por solicitud al servidor. En este caso, UoW debería eliminarse al final de una solicitud y comenzar en algún lugar después del comienzo de una solicitud (idealmente, el inicio de una UoW debería ser flojo). El mejor lugar para hacer esto es Global.asax (o su clase HttpApplication) utilizando los manejadores Application_EndRequest y Application_BeginRequest.
Esto se puede lograr fácilmente con un marco IOC (mi favorito es Windsor), ver this question para detalles de implementación.

+0

+1 ¡Por estar en lo correcto! : P –

+0

+1 Gracias por su enfoque Zihotki. – SDReyes

+0

@zihotki: en su diseño, ¿qué agrega comandos a la Unidad de trabajo? –

5

El controlador. Esto obtiene el contexto, por lo que puede comenzar y terminar la unidad de trabajo. Por ejemplo, una sesión nHibernate por solicitud necesitaría que supiera cuándo comenzó y terminó la solicitud, por lo que necesita el contexto para darle la solicitud.

+0

+1 Gracias Mark! De todos modos voy a esperar para obtener más opiniones sobre:) – SDReyes

+1

Eso es genial, es difícil decir cuál es la respuesta, ya que hay más de una forma de ver la unidad de trabajo. Algunas personas lo tienen como todo el trabajo para la representación de una página, otros tienen ámbitos de transacción que podrían ser manejados por otras clases. Incluso para casos más granulares, creo que es bueno tener el controlador a cargo de los recursos que finalmente puede devolver (eliminar o lo que sea). Tal vez podrías publicar más y puedo intentar y dar una mejor respuesta. Gracias :) –

+0

Gracias por responder Marcos:) Bueno, en una unidad de trabajo solicitada. Creo que tienes razón. Solo creo que podría haber algo que no se haya considerado. :) -i.e. No lo había pensado en UoW orientado a transacciones: P- Gracias de nuevo – SDReyes

2

Como zihotki dijo que estarías violando el SRP si le das esta responsabilidad al controlador. Este es un patrón orientado a la manipulación de datos, y como tal no debería ser una preocupación para el controlador ... eso lo convertiría en dos violaciones: una para el SRP y otra para el principio de SoC.

En cuanto a quién tiene la responsabilidad, eso es algo que debe definir su arquitectura. La sugerencia StartRequest/EndRequest parece lo suficientemente sólida.

+0

Gracias Jose +1 Estoy de acuerdo con StartRequest/EndRequest también. – SDReyes

3

Soy un creyente en la arquitectura débilmente acoplada. Mi controlador no sabe NADA sobre el repositorio, contexto o unidad de trabajo. Creé una capa de servicio (no estoy seguro de que sea el término correcto) que el controlador llama. Este servicio luego trabaja con el repositorio (dll) para conservar todos los datos.

Cuestiones relacionadas