Sollte es in Asp.net mvc eine Service-Schicht geben?

8

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.

    
Amitabh 24.02.2010, 14:15
quelle

6 Antworten

2

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.

    
Aim Kai 24.02.2010, 14:27
quelle
10

Wenn Sie Domain Driven Design genau befolgen, werden Sie feststellen, dass es 3 Arten von Diensten gibt (mögen Sie nicht überladene Begriffe?).

  • Domänendienste : Kapselt Geschäftslogik, die nicht natürlich in ein Domänenobjekt passt, und sind KEINE typischen CRUD-Operationen - diese würden zu einem Repository gehören.
  • Anwendungsdienste : Wird von externen Benutzern verwendet, um mit Ihrem System zu sprechen (think Web Services ). Wenn Verbraucher Zugriff auf CRUD-Operationen benötigen, werden sie hier angezeigt (aber von dem entsprechenden Repository gehandhabt)
  • Infrastructure Services : Wird verwendet, um technische Probleme (z. B. MSMQ, E-Mail-Anbieter usw.) zu abstrahieren

Klingt so, als ob Sie Domain Services benötigen, um Ihre Geschäftslogik zu kapseln / zu teilen.

Hoffe das hilft!

    
Vijay Patel 25.02.2010 12:37
quelle
4

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.

    
Paul 24.02.2010 15:58
quelle
3

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.

    
Lee Warner 24.02.2010 14:18
quelle
3

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.

    
Seth Petry-Johnson 24.02.2010 14:25
quelle
1

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.

    
gautema 24.02.2010 14:23
quelle