Domanda

Chi ha la responsabilità


Chi ha la responsabilità di iniziare e finire l'unità di lavoro in un'architettura MVC?

È stato utile?

Soluzione

Non è una responsabilità di un controllore, esso viola SRP . Controller non dovrebbe nemmeno essere informato UoW a tutti. Nel web, uno UoW per richiesta al server è di solito utilizzato. In questo caso UoW devono essere smaltiti al termine di una richiesta e ha iniziato da qualche parte dopo l'inizio di una richiesta (idealmente inizio di un UoW dovrebbe essere pigro). Il posto migliore per farlo è Global.asax (o la classe HttpApplication) utilizzando Application_EndRequest e gestori Application_BeginRequest.
Ciò può essere ottenuto facilmente con un quadro IOC (il mio preferito è di Windsor), vedere questa domanda per i dettagli di implementazione.

Altri suggerimenti

Il controller. Questo diventa il contesto, in modo da poter iniziare e finire l'unità di lavoro. Per esempio una sessione di NHibernate per richiesta avrebbe bisogno di sapere quando la richiesta aveva iniziato e finito, quindi è necessario contesto per darvi la richiesta.

Sono un credente in un'architettura loosely coupled. Il mio controller non sa nulla del repository, contesto o unitofwork. Ho creato un livello di servizio (non sono sicuro che sia il termine giusto) che il controllore chiama. Questo servizio funziona quindi con il repository (dll) a persistere tutti i dati.

Come zihotki detto si sarebbe violare la SRP se si dà questa responsabilità al controllore. Questa è una manipolazione orientato modello di dati, e come tale non dovrebbe essere una preoccupazione per il controller ... che renderebbe due violazioni: uno per lo SRP e anothrt del principio SoC

.

Per quanto riguarda chi ha la responsabilità, questo è qualcosa che deve essere definita dal vostro architettura. Il suggerimento StartRequest / EndRequest sembra abbastanza solida.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top