2

Ich verstehe, dass Entity-Datenmodelle von realen Domänenmodellen getrennt werden sollten, um eine Kopplung zwischen Infrastrukturanliegen und Domäne selbst zu vermeiden, aber ich fragte mich, ob alle Domain-Eigenschaften keine öffentlichen Setter haben. Wie können wir vom Datenmodell zum Domänenmodell mappen, insbesondere wenn sich die Repository-Implementierung im Infrastrukturteil des Projekts befindet, sodass wir keine internen Property Setter verwenden können.DDD Mapping Entity Framework Datenmodell zu Domain-Modellen

class DomainModel 
{ 
    string SomeProperty {get; private set:} 
} 
+2

Parameter übergeben mit Konstruktor. Aber EF ist bereits Repository-Muster und Arbeitseinheit, warum brauchen Sie noch eine weitere Abstraktion auf dieser Grundlage? Wenn Sie zuerst Code verwenden, benötigen Sie auch kein Datenmodell. Datenbank nur dem Domänenmodell zuordnen. –

+0

@ L-Four Was ist, wenn zwei verschiedene Domänenmodelle dieselbe Infrastrukturtabelle verwenden oder komplexe Eigenschaften innerhalb komplexer Eigenschaften erforderlich sind? – Robert

+0

Verwenden Sie dann Techniken wie "Entity Splitting". Nicht sicher, was Sie mit komplexer Eigenschaft innerhalb komplexer Eigenschaft meinen. –

Antwort

2

In einem Schema, in dem Sie ein Zwischen „Datenmodell“ haben, Entity Framework nicht mehr Kontrolle darüber, wie Sie Ihre Domain-Entitäten instanziiert werden. Ihr Repository hat. Sie brauchen also nicht unbedingt öffentliche Setter, Sie können sie auch mit dem Konstruktor rehydrieren.

Eine solche Technik wird hier erklärt: https://vaughnvernon.co/?p=879

Beachten Sie, dass eine einfachere Alternative, um die zusätzlichen Datenmodell sein kann und privaten Setter (siehe https://lostechies.com/jimmybogard/2014/04/29/domain-modeling-with-entity-framework-scorecard/) verwenden, um zu vermeiden, wenn Sie die geringe Auswirkungen EF betrachten auf Ihrer Entitäten ein angemessener Kompromiss.

0

Ich verstehe, dass Daten Entity-Modelle sollten von echten Domain-Modelle

Nicht wahr

vermeiden Kopplung zwischen Infrastruktur Anliegen und Domain selbst

Wahre

getrennt werden

Sie CAN Verwenden Sie EF, um Ihre Domänenmodelle direkt beizubehalten, jedoch sollten Sie Ihre Domänenmodelle nicht an EF koppeln.

Wie sieht das aus?

Angenommen, Sie haben ein Projekt Domain genannt, die Ihre Modelle in ihm hat, und eine andere namens DataStore die Ihre Repositories hat auf die Modelle bestehen (mit EF)

Jetzt in der Regel mit EF würden Sie Attribute und alle Arten verwenden von Unsinn auf die Modelle, die Sie beibehalten möchten, aber diese verschmutzt & Paare diese Modelle zu EF als Speichermechanismus & fügt Abhängigkeiten zu EF von Ihrem reinen Projekt Domain - das ist, was wir versuchen zu vermeiden.

EF6 zu retten, werfen Sie einen Blick auf die EF6 FluentApi, können Sie Ihre Domain-Modelle mit EF arbeiten, ohne Hinzufügen von EF spezifische Attribute oder Abhängigkeiten zu dem Domain Projekt.

Primärschlüssel?

modelBuilder.Entity<OfficeAssignment>().HasKey(t => t.InstructorID); 

Index?

modelBuilder 
.Entity<Department>() 
.Property(t => t.Name) 
.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute())); 

: Nun wird schnell ein Schmerz werden, wenn Sie dies tun, für jedes einzelne Objekt, aber wenn man auf einige Konventionen halten (oder einen Basistyp verwenden diese noch einfacher zu machen)

Dann können Sie Verwenden Sie Reflection, um dies für alle Entitäten in Ihrer Domäne auto-magically zu tun.

Viel Glück

+3

Ich bin ein bisschen spät, aber wie lösen Sie Fremdschlüssel in flüssiger API, wenn Sie nicht möchten, dass Navigationseigenschaften Ihr Domänenmodell verschmutzen? – Robert

Verwandte Themen