0

Ich mache seit einiger Zeit mvc, aber es ist mein erster Kontakt mit DI.MVC - Bestes Muster (UoW + Repositories + Services + DI)

Ich begann ein neues Projekt mit Ninject, das ziemlich einfach und leicht zu verstehen scheint, aber fast jedes Tutorial, das ich sah, hat UoW, Repositories und Services.

Was ich verstehe, ist, dass:

  • Repositorys - abstrakte Schicht für Interaktionen mit EF/MongoDB/XML/Was auch immer eine Datenbank (CRUD Operationen) sein kann
  • UOW - Set von Operationen daß korrelieren miteinander, kann es N Repositories verwenden, um Aufgaben auszuführen, die in Controller verwendet wird
  • Services Ich verstehe nicht wirklich den Punkt, es scheint nur ein weiterer Schritt, da es mehrere UoW verwendet, um "mehr Aufgaben" durchzuführen? Ich bin in diesem verloren.

Ok, es hat mich einige Zeit in Anspruch "fressen" die Repository Sache, da ich es vorziehen, die EF Context Trog die UOW passieren.

Ist es in Ordnung, wenn ich das Repository vergesse und nur den Kontext verwende? Oder wird es für jede Unit Test Aufgabe verwendet?

Was ist die Service Nutzung? Da kann ich alle Aktionen/Aufgaben innerhalb UoW ausführen und dann in den Controllern aufrufen.

Gibt es einen besseren Satz von Mustern zu verwenden?

+0

Primäre Meinung basiert, Abstimmung zu schließen – Liam

+0

Einwand. Es basiert nicht auf der Meinung, es gibt nur eine richtig richtige Aussage darüber. Es kann mehrere "fast korrekte" Aussagen geben. Was ist die Verwendung für Stackoverflow, wenn nicht nach besseren Möglichkeiten der Implementierungen gefragt wird. Es ist nicht alles über Code –

+0

Es könnte gut sein, die ganze "Services" -Sache zu überspringen und direkt zu [handlers] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91) weiterzugehen). – Steven

Antwort

1

Da diese sind sehr häufig wiederverwendet werden können und man könnte über entweder reden, ich bin eine kurze Erklärung zu den einzelnen geben würde.

Domain-Services: Wenn Sie eine Entität haben und beginnen, Logik in sie zu schieben, können Sie zu einem Punkt gelangen, wo ein Teil der Logik nicht wirklich zu dieser Entität gehört, also erstellen Sie einen Domain Service abstrahiere diese Logik weg. Ein Beispiel wäre:

public class Shipment 
{ 
    ... 
    public void CalculateFee(IFeeCalculatorService feeCalculatorService) 
    { 
     ... Any additional and entity relevant logic for fee calculation can be here as well. 
     this.Fee = feeCalculatorService.Calculate(); 
    } 
    ... 
} 

Application Services: Dies sind die Dienste, die Sie von Ihrem Controller Aufruf werden die Operationen für eine bestimmte Aufgabe benötigt einzukapseln. Nehmen wir an, Sie haben einen Controller, der eine Freundschaftsanfrage genehmigt oder ablehnt.Ihr Application Service sollte genügend Daten empfangen können:

  • Finden Sie die Freundschaftsanfrag Domain Einheit
  • Rufen seiner genehmigen oder ablehnen Methode
  • Anruf die Methoden, die Änderung in die Datenbank persistieren zurück
  • Rück relevanten Informationen an die Steuerung

Infrastructure Services: Diese Dienste werden abstrakt die Logik, die nicht r erfreut über das Geschäft, aber im Zusammenhang mit der Anwendung der Anwendung. Ein Beispiel wäre ein Dienst, um Sicherheitstoken zu validieren, die auf Ihren Anforderungen empfangen wurden, oder Protokollierungsaktivitäten durchzuführen.

+0

Ok, das scheint das zu sein, wonach ich gesucht habe, als ich nach Diensten gefragt habe. –

1

EFs DBContext implementiert bereits sowohl die UOW- als auch die Repository-Muster, so dass Sie keinen Vorteil haben, diese in Ihrem eigenen Code erneut zu implementieren.

Dienstleistungen sind ein Weg, um abstrakte Business-Logik, so dass es

+0

Ok, ich sehe so, ich brauche nur Services? Ich verwende UoW, als wäre es die Service-Schicht. –

+0

Seien Sie vorsichtig bei der Beschreibung im Allgemeinen, dass es "keinen Nutzen" hat, eine UOW zusätzlich zu dem EF zu verwenden. Alles hängt vom Kontext ab. Ich finde es oft sehr nützlich, meinen Anwendungscode davon abzuhalten, eine Abhängigkeit von EF zu haben (wie das [DIP] (https://en.wikipedia.org/wiki/Dependency_inversion_principle) vorschreibt), und ich verwende Repositories und Unit of Work dafür. – Steven

+1

@Steven Ich wiederhole, dass Leute halbwegs gebackene UOW- und Repository-Muster ohne guten Grund auf EF setzen, weil "so macht man das". Also ja, wenn Sie diesen Thread lesen müssen, haben Sie keinen Nutzen von ihnen. Im Gegenteil, Ihre eigenen Implementierungen machen es wahrscheinlich schwieriger für Sie, das zu nutzen, was EF bereits kostenlos zur Verfügung stellt. –