2010-02-24 6 views
12

Ich habe eine Viele-zu-Viele-Verbindung zwischen einem Mitarbeiter und einem Team. Foreach Entity Ich habe ein Repository.BestPractices: Ist es akzeptabel, mehr als ein Repository in einem MVC-Controller zu verwenden?

Jetzt verwende ich ASP.NET MVC und ich erstellte einen EmployeeController. Ich habe auch eine Ansicht erstellt, um einen Mitarbeiter zu bearbeiten. Für diese Ansicht benötige ich eine DropDownList mit allen Teams. Das Problem ist, dass mein EmployeeController nur EmployeeRepository hat. Wie kann ich also alle Teams bekommen? Meine Lösung ist jetzt, zwei Repositories zu verwenden.

Aber ist das eine gute Lösung?

Konnte ich stattdessen TeamController erstellen und eine Methode schreiben, die alle Teams zurücksendet (wie würde ich das machen)?

Antwort

8

Ja, es ist durchaus akzeptabel, dass ein Controller Referenzen auf zwei Repositories hat.

Tatsächlich arbeiten meine Controller öfter mit mehreren Repositories.

1

Normalerweise würden Sie ein Repository für den aggregierten Stamm erstellen. Das Repository würde Methoden haben, die die für den Controller aufgefüllten Entitäten zurückgeben.

Wenn die Entitäten in Ihrem Domänenmodell völlig unabhängig sind, möchten Sie möglicherweise einen Service erstellen, der die zwei separaten Repositorys umschließt, um die benötigten Daten zu erhalten.

+1

Wer ist die aggregierte Wurzel in einer Viele-zu-viele-Assoziation :)? In meinem Domänenmodell habe ich eine bidirektionale Viele-zu-Viele-Assoziation. Ich frage mich, welche Vorteile ich hätte, wenn ich stattdessen eine unidirektionale Beziehung aufbaue. Der Employee wäre dann der aggregierte Root. Das Team hat nur eine Beziehung zum Angestellten, also denke ich, das wäre in Ordnung. – Rookian

+0

Einverstanden, wenn ich mit dem gleichen Problem konfrontiert bin, bin ich mit einem Domain-Service gegangen, um die Repositories zu schließen. – blu

+1

Mein Vorschlag ist 1: Sehen Sie, ob es eine logische Wurzel für die Domain-Regeln gibt. Wenn nicht, 2: Verwenden Sie einen Domain-Service. Andere Leute haben Dienste mit + Stimmen vorgeschlagen, so dass diese abgelehnt wird, ist fraglich. – blu

3

Möchten Sie schlau gehen? Verwenden Sie keine Repositories innerhalb von Controllern. Verwenden Sie stattdessen die Domänendienste. Es klingt nicht so schlecht, wenn Sie denken, dass ein Controller die Arbeit vieler Dienste integriert, nicht wahr?

Verwandte Themen