7 Stimmen

Wie man Unit of work in MVC implementiert: Verantwortung

Wer hat die Verantwortung


Wer ist in einer MVC-Architektur für das Starten und Beenden der Arbeitseinheit verantwortlich?

10voto

zihotki Punkte 5211

Es liegt nicht in der Verantwortung eines Kontrolleurs, es verstößt gegen SRP . Controller sollten UoW gar nicht kennen. Im Web wird normalerweise eine UoW pro Anfrage an den Server verwendet. In diesem Fall sollte UoW am Ende einer Anfrage entsorgt und irgendwo nach dem Beginn einer Anfrage gestartet werden (idealerweise sollte der Start eines UoWs "lazy" sein). Der beste Ort, dies zu tun ist Global.asax (oder Ihre HttpApplication Klasse) mit Application_EndRequest und Application_BeginRequest Handler.
Dies kann leicht mit einem IOC-Framework erreicht werden (mein Favorit ist Windsor), siehe diese Frage für Details zur Implementierung.

5voto

Mark Dickinson Punkte 6423

Der Controller. Dieser erhält den Kontext, so dass Sie die Arbeitseinheit starten und beenden können. Bei einer nHibernate-Sitzung pro Anfrage müssen Sie z. B. wissen, wann die Anfrage begonnen und beendet wurde; Sie benötigen also den Kontext, um die Anfrage zu erhalten.

3voto

Spydermary Punkte 31

Ich bin ein Verfechter der lose gekoppelten Architektur. Mein Controller weiß NICHTS über das Repository, den Kontext oder die Unit of Work. Ich habe eine Dienstschicht (ich bin mir nicht sicher, ob das der richtige Begriff ist) erstellt, die der Controller aufruft. Dieser Dienst arbeitet dann mit dem Repository (dll) zusammen, um alle Daten aufrechtzuerhalten.

2voto

JoseMarmolejos Punkte 1760

Wie zihotki sagte, würden Sie gegen die SVB verstoßen, wenn Sie diese Verantwortung dem Kontrolleur übertragen. Dies ist ein Muster, das sich an der Datenmanipulation orientiert, und als solches sollte es keine Angelegenheit für den Controller sein ... das würde zwei Verstöße bedeuten: einen für die SRP und einen weiteren für das SoC-Prinzip.

Die Frage, wer die Verantwortung trägt, muss durch Ihre Architektur definiert werden. Der StartRequest/EndRequest-Vorschlag scheint solide genug zu sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X