Du hast tatsächlich recht. DbContext
ist eine Implementierung des Arbeitseinheitsmusters und IDbSet
eine Implementierung des Repository-Musters.
Repositories sind derzeit sehr beliebt und werden häufig verwendet. Jeder verwendet sie nur, weil es Dutzende von Artikeln zum Erstellen eines Repositorys für das Entity-Framework gibt, aber niemand beschreibt tatsächlich die Herausforderungen im Zusammenhang mit dieser Entscheidung.
Hauptgründe für die Verwendung des Repositorys sind normalerweise:
- Verstecke EF vor der oberen Schicht
- Machen Sie Code besser testbar
Der erste Grund ist eine Art architektonische Reinheit und eine großartige Idee, dass Sie später zu einem anderen Persistenz-Framework wechseln können, wenn Sie Ihre oberen Schichten von EF unabhängig machen. Wie oft haben Sie so etwas in der realen Welt gesehen? Dieser Grund erschwert die Arbeit mit EF erheblich, da Ihr Repository viele zusätzliche Funktionen bereitstellen muss, die das einschließen, was EF standardmäßig zulässt.
Gleichzeitig kann das Umschließen von EF-Code Ihren Code besser organisieren und die Regel der Trennung von Bedenken befolgen. Für mich kann dies der einzige wirkliche Vorteil von Repository und Arbeitseinheit sein, aber Sie müssen verstehen, dass das Befolgen dieser Regel mit EF Ihren Code möglicherweise besser wartbar und besser lesbar macht, aber bei den anfänglichen Bemühungen, Ihre Anwendung zu erstellen, viel höher und höher ist Für kleinere Anwendungen kann dies eine unnötige Komplexität sein.
Der zweite Grund ist teilweise richtig. Der große Nachteil von EF ist die starre Architektur, die kaum verspottet werden kann. Wenn Sie also die obere Schicht als Unit-Test durchführen möchten, müssen Sie EF irgendwie umschließen, damit die Implementierung verspottet werden kann. Dies hat aber noch viele andere Konsequenzen, die ich hier beschrieben habe .
Ich folge Ayendes Blog . Wenn Sie jemals NHibernate verwendet haben, kennen Sie wahrscheinlich seine Artikel. Dieser Typ hat kürzlich mehrere Artikel gegen die Verwendung von Repository mit NHibernate geschrieben, aber NHibernate ist viel besser verspottbar.