Ich habe eine Frage zu Github an das EF-Team gesendet. Ich habe eine Antwort erhalten, die besagt, dass es besser ist, diese Frage hier zu stellen, damit ich sie hier kopieren und einfügen kann, da wir als Link die wenigen Antworten auf GitHub sehen können.
Frage: Ich habe einige Nachforschungen angestellt und jemand hat darauf hingewiesen, dass in Zeile 24 der DBContext-Klasse angegeben ist
DbContext ist eine Kombination aus Arbeitseinheits- und Repository-Mustern.
Bedeutet dies, dass wir EF nicht mehr in ein Repository abstrahieren und es dann mit und Interface in Controller einfügen müssen?
Ursprünglicher Beitrag auf Github: https://github.com/aspnet/EntityFramework/issues/4899
Der Grund, warum ich das frage, ist, dass ich an eine Stelle komme, an der ich dem Repository viele Methoden wie GetById, GetByName, GetWithIncludesABC, GetWithIncludes123 usw. hinzufüge, und es scheint das Repo in meinem Kopf zu verschmutzen
quelle
Antworten:
Wenn Sie einem Repository Methoden wie hinzufügen
Dann ist es besser, zu einer Service-Schicht zu wechseln und die Service-Schicht EF direkt verwenden zu lassen. EF verfügt bereits über ähnliche Funktionen wie die oben genannten Methoden, die Sie nur endlos duplizieren.
Ein Service Layer macht Business Domain-Methoden verfügbar und implementiert sie mithilfe von CRUD . Beispielsweise haben Sie möglicherweise eine Methode namens
TransferMoney(A, B)
, bei der A und B Konten überprüfen. Auf diese Weise können Sie die Sprache Ihrer Geschäftsdomäne sprechen, während die Service-Schicht die CRUD für Sie verwaltet.Der einzige zwingende Grund, warum ich mir vorstellen kann, wo Sie möglicherweise eine separate Repository-Schicht haben möchten, ist, dass Sie diese Repository-Schicht verspotten oder zu Testzwecken eine andere Datenquelle ersetzen können.
quelle
Robert Harvey sagte in seiner Antwort:
Genau aus diesem Grund ist das Repository-Muster immer noch relevant. Ich bin auch nicht einverstanden mit der Behauptung der Entity Framework-Teams, dass sie das Repository-Muster implementieren. Entity Framework ist immer noch stark an eine Datenbank gebunden. Der gesamte Zweck des Repository-Musters besteht darin, den genauen Persistenzmechanismus, der in Ihrer Anwendung verwendet wird, zu entkoppeln und zu abstrahieren, sodass nichts von der Implementierung des Datenzugriffs außerhalb der Repository-Schicht verloren geht.
Wenn Sie die EF-Abfrage-API außerhalb des "Repositorys" verwenden, wie in einem Serviceobjekt, würde ich sagen, dass Sie das Muster brechen.
Wenn es kein katastrophales Problem für datenbankähnliche Funktionen ist, in Ihren anderen Code zu gelangen, und Sie garantieren können, dass Sie einige Ihrer CRUD-Vorgänge in Zukunft nicht mehr auf einen Webdienst verschieben müssen, ist die direkte Verwendung von EF der Fall IN ORDNUNG.
Grundsätzlich ersetzt Entity Framework das Gateway-Objekt im Repository-Muster. Ich sehe es nicht als Repository selbst.
quelle
TransferFunds()
undBuildWidget()
. Ein Repository enthält nur CRUD-Methoden.Repositorys scheinen nicht benötigt zu werden - Microsoft verwendet sie in seinen Beispiel-Backend-Microservices-Anwendungen nicht:
https://github.com/Microsoft/BikeSharing360_BackendServices
Die Beispiel-BikeSharing-App wurde auf Connect () angezeigt. Ereignis (ich denke, es kann als Vorlage für API-Projekte verwendet werden):
https://blogs.msdn.microsoft.com/visualstudio/2016/12/14/connectdemos-2016-bikesharing360-on-github/
quelle