Viele Tutorials zu DDD, die ich studiert habe, befassen sich hauptsächlich mit Theorie. Sie alle haben rudimentäre Codebeispiele (Pluralsight und ähnliches).
Im Internet gibt es auch Versuche einiger Leute, Tutorials zu DDD mit EF zu erstellen. Wenn Sie sie nur kurz studieren, bemerken Sie schnell, dass sie sich stark voneinander unterscheiden. Einige Leute empfehlen, die App auf ein Minimum zu beschränken und die Einführung zusätzlicher Ebenen, z. B. eines Repositorys über EF , zu vermeiden. Andere generieren entschieden zusätzliche Ebenen und verletzen häufig sogar SRP, indem sie DbContext
in Aggregate Roots injizieren .
Ich entschuldige mich schrecklich, wenn ich eine meinungsbasierte Frage stelle, aber ...
Wenn es um die Praxis geht - Entity Framework ist eines der leistungsstärksten und am weitesten verbreiteten ORMs. Sie werden leider keinen umfassenden Kurs finden, der DDD behandelt.
Wichtige Aspekte:
Entity Framework bringt UoW & Repository (
DbSet
) sofort einsatzbereitMit EF haben Ihre Modelle Navigationseigenschaften
mit EF alle Modelle sind immer verfügbar ab
DbContext
(sie sind als dargestelltDbSet
)
Tücken:
Sie können nicht garantieren, dass Ihre untergeordneten Modelle nur über Aggregate Root betroffen sind. Ihre Modelle verfügen über Navigationseigenschaften und können geändert und aufgerufen werden
dbContext.SaveChanges()
Mit
DbContext
können Sie auf jedes Modell zugreifen und so Aggregate Root umgehenSie können den Zugriff auf die untergeordneten Elemente des Stammobjekts über die Methode
ModelBuilder
in einschränkenOnModelCreating
, indem Sie sie als Felder markieren. Ich glaube immer noch nicht, dass dies der richtige Weg für DDD ist. Außerdem ist es schwierig zu bewerten, zu welchen Abenteuern dies in Zukunft führen kann ( ziemlich skeptisch) )
Konflikte:
Ohne die Implementierung einer weiteren Repository-Schicht, die Aggregate zurückgibt, können wir die oben genannten Fallstricke nicht einmal teilweise beheben
Durch die Implementierung einer zusätzlichen Repository-Schicht ignorieren wir die integrierten Funktionen von EF (jedes
DbSet
ist bereits ein Repo) und komplizieren die App übermäßig
Meine Schlussfolgerung:
Bitte entschuldigen Sie meine Unwissenheit, aber basierend auf den obigen Informationen - entweder ist das Entity Framework nicht für domänengesteuertes Design geeignet oder das domänengesteuerte Design ist ein unvollständiger und veralteter Ansatz.
Ich vermute, dass jeder der Ansätze seine Vorzüge hat, aber ich bin jetzt völlig verloren und habe nicht die geringste Ahnung, wie EF mit DDD in Einklang gebracht werden kann.
Wenn ich falsch liege - könnte jemand zumindest eine einfache Anleitung (oder sogar anständige Codebeispiele) für die Vorgehensweise bei DDD mit EF angeben?