2009-08-23 10 views
1

Ist es ein guter Codierungsstandard, um ASP.NET MVC-Controller-Aktionen den direkten Zugriff auf ein Repository zu ermöglichen (auch wenn eine Service-Schicht für das Heavy-Lifting vorhanden ist, z. B. LoginService.Authorize()), um Daten abzurufen, hinzuzufügen oder zu aktualisieren? Oder sollte alles durch den Service gehen und von dort zum Repository?Access Repository über Service oder direkt?

Antwort

2

Es ist besser, die Service-Schicht zu durchlaufen (je nachdem, wie Sie es implementiert haben), denn das ist der Punkt - ein einzelner Zugangspunkt, also alle unternehmensspezifischen Dinge, die Sie dort tun, werden dargestellt und für alle Anrufer implementiert.

4

Für kleinere Anwendungen/Webs, tendiere ich nicht Service Layer zu verwenden, weil es nur Repositories Methoden 1: 1, und ich verliere KISS. Aber am Ende kommt es auf das Geschäftsmodell an; Repository abstrahiert den Datenbankzugriff, und Dienste kapseln Logik.

1

Es hängt wirklich von der Komplexität ab. Wenn Sie sich mit einem transcation scoping befassen, würde ich das definitiv vom Controller in Ihre Service-Schicht entkoppeln.

0

Meiner Meinung nach wird es von Ihrem Design/Architektur abhängen. Was ist der Zweck eines Repositories? Tun CRUD Operationen (Erstellen, Lesen, Aktualisieren und Löschen).

Wenn Sie die anämischen Domänenmodelle in einer klassischen Drei-Ebenen-Architektur verwenden, werden alle Logik, die auf die Modelle angewendet wird, in den Diensten vorgenommen. In diesem Fall ist die Wahl offensichtlich: Sie sollten das Repository nicht direkt aufrufen. Warum? Da Ihre Modelle dumm sind und die Logik in den Diensten liegt, könnten Sie ungültige Modelle erstellen. Wenn Sie das Repository aufrufen können, können Sie ein ungültiges Modell in der Datenbank erstellen/aktualisieren. Wenn Sie die Dienste anrufen, sollte es in der Lage sein oder Ihr Modell vor dem Erstellen/Aktualisieren zu korrigieren.

Wenn Sie ein Rich-Domain-Modell in einer Zwiebel-Architektur verwenden, ist es anders. Da Ihre Modelle immer gültig sein sollen (wenn Sie eine aus dem Konstruktor oder aus der Factory erstellen, wurden alle Validierungen durchgeführt und wenn Sie eines aktualisieren, ist es dasselbe), können Sie ohne Probleme direkt das Repository aufrufen. In diesem Zusammenhang ist die gesamte Logik in den Modellen direkt und die Dienste werden nur verwendet, um die Logik zu speichern, die nicht zu einem bestimmten Modell gehört.

Jetzt ist die Frage nicht "wie Repository zu verwenden", sondern "welches Design/Architektur brauche ich?" und die erste Frage wird beantwortet :-)

Verwandte Themen