Es gibt ein paar zugrunde liegenden Probleme mit diesem Ansatz (IMO):
EF, wie jede ORM, fällt in die Persistenz Sorge. Daher sollte es nicht stören, wie Sie Ihr Domänenmodell strukturieren. Die Tatsache, dass Sie alle Entitäten beibehalten haben, die wie ein persistenter Speicher klingen, kann ein Hinweis darauf sein, dass sich Ihre beschränkten Kontexte überlappen oder nicht vorhanden sind.
Der Versuch, zu einer besseren Struktur zu bewegen, ist keine schlechte Sache :) --- aber, wie Mark Oreta sagte, würde ich wahrscheinlich nicht mit der EF-Struktur stören.
Das Hauptproblem, auf das Sie stoßen, wird dadurch verursacht, dass Sie versuchen, von Ihrem Domänenmodell zu lesen. Dies scheint in Systemen allzu oft aufzutauchen und macht die Dinge ziemlich schwierig. Lazy-Loading ist das direkte Ergebnis von genau diesem. Wenn Sie lesen, sollten Sie im Idealfall eine Abfrageebene mit Zugriff auf einen Abfragespeicher (möglicherweise die gleiche Datenbank) verwenden, der für das Lesen optimiert ist. In Ihrem Beispiel benötigen Sie einen denormalisierten Kundennamen in Ihrer Verkaufsdomäne. Das ist gut. Der Versuch, dies zu erreichen, indem Sie Ihr Domänenmodell lesen und dann versuchen, Daten aus einem Domänenmodell in einem anderen beschränkten Kontext einzuziehen, verursacht Ihnen den Schmerz.
Wenn Sie die Route der Teilung Ihrer Daten gehen, dann müssen Sie halten es Split.
Obwohl die Daten von verschiedenen BCs alle im selben Speicher sein können, sollten Sie Ihre Daten so betrachten, als ob jeder BC über eine eigene Datenbank verfügt. Manchmal habe ich ein einzelnes Projekt mit verschiedenen Problemen (Ebenen zu einigen) in verschiedenen Ordnern/Namespaces (.NET hier). Es sollte möglich sein, diese Bedenken nach Belieben in separate Zusammenstellungen zu zerlegen. Sie sollten also nicht zu eng gekoppelt sein. Dasselbe gilt für diese Datenstruktur, die Sie zu teilen versuchen. Sie sollten im Wesentlichen in der Lage sein, die relevanten BC-Daten in eine separate Datenbank aufzuteilen. Die Mechanismen, um Daten über die BCs zu bekommen, sind eine andere Sache und ich denke, wenn das nicht angegangen werden kann, kann es für Sie schwierig werden.
Obwohl ich glaube nicht, dass BCs von der Datenseite zu identifizieren beste Idee sein kann, es ist sicherlich ein Schritt in der richtigen Richtung :)
Sie sagen also, es ist nicht wirklich wichtig, wenn ich Kunden in meine Sales BC hinzufügen, da es gut ist um jedes BC als separaten Datenspeicher zu behandeln? –
Auch wenn Sie sagen, dass ich einen denormalisierten Kundennamen in meiner Verkaufsdomäne benötige, meinen Sie, dass ich in meiner Sales-Tabelle eine weitere Spalte CustomerName hinzufügen muss? Oder meinen Sie, ich muss hinzufügen die ganze Kunden-Tabelle in meine Verkäufe edmx (BC)? –
Die Sache ist dies: wenn Sie Kunde zu Ihrer Verkaufsdomäne hinzufügen, wird es eine VO, da es Daten (nur eine Ansicht) zur Verfügung stellt und Sie überhaupt mit ihm nicht interagieren würden. Vielleicht hat der "Kunde" in der Sales-Domäne nur eine ID und einen FullName. Aber ziehen Sie die Customer-Entity nicht in Ihre Sales-Domain Wählen Sie den denormalisierten Kundennamen in Ihrer Verkaufsdomäne. Natürlich hängt alles vom Kontext ab :) –