2010-02-10 8 views

Odpowiedz

10

To nie jest odpowiedzialność kontrolera, to narusza SRP. Kontroler w ogóle nie powinien wiedzieć o UoW. W sieci zazwyczaj używana jest jedna UU na żądanie dla serwera. W tym przypadku UoW powinna zostać usunięta na końcu żądania i uruchomiona gdzieś po rozpoczęciu żądania (najlepiej start UoW powinien być leniwy). Najlepszym miejscem do tego jest Global.asax (lub twoja klasa HttpApplication) za pomocą procedur obsługi Application_EndRequest i Application_BeginRequest.
Można to łatwo osiągnąć za pomocą układu IOC (moim ulubionym jest Windsor), zobacz szczegóły implementacji pod adresem this question.

+0

+1 Za bycie prawym! : P –

+0

+1 Dzięki za podejście Zihotki. – SDReyes

+0

@zihotki - w swoim projekcie, co dodaje polecenia do Jednostki Pracy? –

5

Sterownik. W ten sposób uzyskujemy kontekst, dzięki czemu możesz rozpocząć i zakończyć jednostkę pracy. Na przykład sesja nHibernate na żądanie będzie wymagać od Ciebie informacji, kiedy żądanie zostało rozpoczęte i zakończone, więc potrzebujesz kontekstu, by przekazać Ci żądanie.

+0

+1 Dzięki Mark! W każdym razie będę czekać na więcej opinii na temat:) – SDReyes

+1

To jest fajne, trudno powiedzieć, co chcesz uzyskać odpowiedź, ponieważ istnieje więcej niż jeden sposób patrzenia na jednostkę pracy. Niektóre osoby mają to jako całość do renderowania strony, inne mają zakresy transakcji, które mogą być obsługiwane przez inne klasy. Nawet w przypadku bardziej ziarnistych przypadków, myślę, że dobrze jest mieć kontrolera odpowiedzialnego za zasoby, które może on ostatecznie oddać (dispose lub cokolwiek innego). Może mógłbyś opublikować więcej i mogę spróbować dać lepszą odpowiedź. Dzięki :) –

+0

Dzięki za odpowiedź Mark:) Cóż, w ukierunkowanej na żądanie jednostce pracy. Myślę, że masz rację. Po prostu uważam, że być może coś nie zostało uwzględnione. :) -i.e. Nie miałem jednak w UoW zorientowanej na transakcje: P- Jeszcze raz dziękuję – SDReyes

2

Jak zihotki powiedział, że naruszysz SRP, jeśli przekażesz tę odpowiedzialność kontrolerowi. Jest to wzorzec zorientowany na manipulację danymi i jako taki nie powinien stanowić problemu dla administratora ... spowodowałby to dwa naruszenia: jeden dla SRP i anothrt dla zasady SoC.

Co do tego, kto ponosi odpowiedzialność, jest to coś, co należy zdefiniować w swojej architekturze. Sugestia StartRequest/EndRequest wydaje się wystarczająco solidna.

+0

Dzięki Jose +1 Zgadzam się również z StartRequest/EndRequest. – SDReyes

3

Jestem zwolennikiem luźno powiązanej architektury. Mój kontroler nie zna NIC na temat repozytorium, kontekstu lub unitofwork. Utworzyłem warstwę usługi (nie jestem pewien, czy to właściwy termin), którą kontroler wywołuje. Ta usługa następnie działa z repozytorium (dll), aby utrzymać wszystkie dane.

Powiązane problemy