2010-02-10 13 views

risposta

10

Non è una responsabilità di un controller, viola SRP. Il controller non dovrebbe nemmeno sapere nulla di UoW. Di solito viene utilizzato un UoW per richiesta sul server. In questo caso, UoW deve essere smaltito alla fine di una richiesta e avviato da qualche parte dopo l'inizio di una richiesta (idealmente l'avvio di una UoW dovrebbe essere pigro). Il posto migliore per farlo è Global.asax (o la tua classe HttpApplication) usando i gestori Application_EndRequest e Application_BeginRequest.
Questo può essere facilmente ottenuto con un framework IOC (il mio preferito è Windsor), vedere this question per i dettagli di implementazione.

+0

+1 Per aver ragione! : P –

+0

+1 Grazie per il tuo approccio Zihotki. – SDReyes

+0

@zihotki - nel tuo progetto, cosa aggiunge comandi all'unità di lavoro? –

5

Il controller. Questo ottiene il contesto, così puoi iniziare e finire l'unità di lavoro. Ad esempio, una sessione di ibernazione per richiesta richiederebbe che tu sappia quando la richiesta è stata avviata e terminata, quindi hai bisogno del contesto per darti la richiesta.

+0

+1 Grazie Marco! Ad ogni modo aspetterò altre opinioni su:) – SDReyes

+1

È bello, è difficile dire cosa si vuole che la risposta sia, poiché c'è più di un modo di vedere l'unità di lavoro. Alcuni hanno l'intero lavoro per il rendering di una pagina, altri hanno ambiti di transazione che potrebbero essere gestiti da altre classi. Anche per casi più granulari, penso che sia bene avere il responsabile del controllo delle risorse che può eventualmente restituire (smaltire o qualsiasi altra cosa). Forse potresti postare di più e posso provare a dare una risposta migliore. Grazie :) –

+0

Grazie per la risposta Marco:) Bene, in una richiesta di unità di lavoro orientata. Penso che tu abbia ragione. Credo solo che ci possa essere qualcosa da non aver considerato. :) -i.e. Non avevo però in transazione orientata UoW: P- Grazie ancora – SDReyes

2

Come zihotki ha detto che si sarebbe violato l'SRP se si assegna questa responsabilità al controllore. Questo è un modello orientato alla manipolazione dei dati, e come tale non dovrebbe essere una preoccupazione per il controllore ... che farebbe due violazioni: uno per l'SRP e un altro per il principio SoC.

Per quanto riguarda chi ha la responsabilità, questo è qualcosa che deve essere definito dalla tua architettura. Il suggerimento StartRequest/EndRequest sembra abbastanza solido.

+0

Grazie Jose +1 Sono d'accordo con StartRequest/EndRequest. – SDReyes

3

Sono un credente in un'architettura liberamente accoppiata. Il mio controller non sa nulla del repository, del contesto o dell'unità di lavoro. Ho creato un livello di servizio (non è sicuro che sia il termine giusto) che il controller chiama. Questo servizio funziona quindi con il repository (dll) per mantenere tutti i dati.

Problemi correlati