Sollte es in ASP.net MVC eine Service-Schicht zwischen Controller und Repository geben? Als Repository gibt es nur Datenzugriff. Einige Geschäftslogik ist in Controller übergelaufen. Dies kann zu einem Problem führen, wenn der klassische Asp.Net-Client dieselbe Operation verwendet, da wir die Logik im Controller duplizieren müssen.
Ich empfehle dringend, eine Service-Schicht zu verwenden, damit Sie die gemeinsame Funktionalität zwischen verschiedenen Web-Anwendungen teilen können. Es ist vielleicht ein Fall, dass die Architektur bereits existiert und Sie vielleicht eine neue mvc-Website am Frontend hinzufügen möchten.
Für einfache Architekturen, die von Grund auf neu erstellt wurden, ist es vielleicht zu viel.
Wenn Sie Domain Driven Design genau befolgen, werden Sie feststellen, dass es 3 Arten von Diensten gibt (mögen Sie nicht überladene Begriffe?).
Klingt so, als ob Sie Domain Services benötigen, um Ihre Geschäftslogik zu kapseln / zu teilen.
Hoffe das hilft!
TBH, ich bin in beide Richtungen gegangen. Meine derzeitige Perspektive ist, dass ein Repository ein Service ist, es ist nur ein Service, der die Aufgabe hat, CRUD-Ops für einen Domain-Aggregat-Root zu bearbeiten. jetzt, wenn Sie "Repositories" sind direkt 1: 1 mit Ihren Entitäten zugeordnet (und daher nicht Repositories so viel wie DAOs '), dann könnte ich das Argument sehen. Aber im Allgemeinen füge ich Ebenen der Abstraktion nach Bedarf hinzu, aber erst, wenn nachgewiesen ist, dass sie für eine bestimmte App benötigt werden. Andernfalls übergibst du.
Ich mag die zusätzliche Abstraktionsebene, die eine Service-Schicht zwischen meinen Controllern und Repositories bietet. Ich denke, es hilft enorm bei der Erfüllung des Grundsatzes der einfachen Verantwortung.
Ich habe ein bisschen damit experimentiert. Die App, die ich gerade erstellte, war ziemlich CRUD-y, und meine Service-Schicht zeigte schließlich fast die gleichen Schnittstellen wie meine Repositories. Darüber hinaus haben die meisten Serviceaufrufe keine zusätzliche Logik über den Repo hinzugefügt, sie waren nur Pass-Through-Methoden. Der einzige Ort, an dem die Serviceschicht war, war während einer Aktualisierung oder Einfügung eines neuen Datensatzes. Ich entschied, dass in einem CRUD-basierten System die Serviceschicht mehr Reibung verursachte als Mehrwert . Am Ende habe ich meine Geschäftsmodell-Klassen erweitert, so dass die Servicelogik als Operationen gegen das Modell offengelegt wurde, wodurch meine Controller-Methoden schlank und sauber blieben.
In einem eher verhaltensorientierten System denke ich jedoch, dass eine Service-Schicht mehr Wert hinzufügen könnte.
Ich möchte in den meisten Fällen Repositories direkt im Controller haben und einen Service machen, bei dem ich das Gefühl habe, dass es leckt. Ich versuche, reiche Domain-Objekte zu haben, aber in den Fällen, in denen Logik nicht in die Domain-Klassen passt, erstelle ich einen Service.
Tags und Links asp.net-mvc asp.net repository-pattern nhibernate domain-driven-design