Ich habe diese Antwort vor ungefähr vier Jahren geschrieben und meine Meinung hat sich nicht geändert. Seitdem gab es jedoch bedeutende Entwicklungen im Bereich der Mikrodienste. Ich habe am Ende spezifische Hinweise zu Mikrodiensten hinzugefügt ...
Ich werde gegen die Idee abwägen, mit realer Erfahrung, um meine Stimme zu stützen.
Ich wurde zu einer großen Anwendung weitergeleitet, die fünf Kontexte für eine einzelne Datenbank hatte. Am Ende haben wir alle Kontexte bis auf einen entfernt und sind zu einem einzigen Kontext zurückgekehrt.
Auf den ersten Blick scheint die Idee mehrerer Kontexte eine gute Idee zu sein. Wir können unseren Datenzugriff in Domänen unterteilen und mehrere saubere, leichtgewichtige Kontexte bereitstellen. Klingt nach DDD, oder? Dies würde unseren Datenzugriff vereinfachen. Ein weiteres Argument für die Leistung ist, dass wir nur auf den Kontext zugreifen, den wir benötigen.
In der Praxis teilten viele unserer Tabellen mit dem Anwachsen unserer Anwendung Beziehungen in unseren verschiedenen Kontexten. Beispielsweise erforderten Abfragen an Tabelle A in Kontext 1 auch das Verknüpfen von Tabelle B in Kontext 2.
Dies ließ uns ein paar schlechte Entscheidungen. Wir könnten die Tabellen in den verschiedenen Kontexten duplizieren. Wir haben es versucht. Dies führte zu mehreren Zuordnungsproblemen, einschließlich einer EF-Einschränkung, bei der jede Entität einen eindeutigen Namen haben muss. So kamen wir zu Entitäten mit den Namen Person1 und Person2 in den verschiedenen Kontexten. Man könnte argumentieren, dass dies unsererseits schlechtes Design war, aber trotz unserer besten Bemühungen ist unsere Anwendung auf diese Weise tatsächlich in der realen Welt gewachsen.
Wir haben auch versucht, beide Kontexte abzufragen, um die benötigten Daten zu erhalten. Zum Beispiel würde unsere Geschäftslogik die Hälfte dessen, was sie benötigt, aus Kontext 1 und die andere Hälfte aus Kontext 2 abfragen. Dies hatte einige Hauptprobleme. Anstatt eine Abfrage für einen einzelnen Kontext durchzuführen, mussten mehrere Abfragen in verschiedenen Kontexten durchgeführt werden. Dies hat eine echte Leistungsstrafe.
Am Ende ist die gute Nachricht, dass es einfach war, die verschiedenen Kontexte zu entfernen. Der Kontext soll ein leichtes Objekt sein. Daher denke ich nicht, dass Leistung ein gutes Argument für mehrere Kontexte ist. In fast allen Fällen glaube ich, dass ein einzelner Kontext einfacher, weniger komplex und wahrscheinlich leistungsfähiger ist, und Sie müssen keine Reihe von Workarounds implementieren, um ihn zum Laufen zu bringen.
Ich dachte an eine Situation, in der mehrere Kontexte nützlich sein könnten. Ein separater Kontext kann verwendet werden, um ein physisches Problem mit der Datenbank zu beheben, in der sie tatsächlich mehr als eine Domäne enthält. Im Idealfall wäre ein Kontext eins zu eins zu einer Domäne, der eins zu eins zu einer Datenbank wäre. Mit anderen Worten, wenn eine Reihe von Tabellen in keiner Weise mit den anderen Tabellen in einer bestimmten Datenbank verwandt ist, sollten sie wahrscheinlich in eine separate Datenbank gezogen werden. Mir ist klar, dass dies nicht immer praktisch ist. Aber wenn eine Reihe von Tabellen so unterschiedlich ist, dass Sie sie gerne in eine separate Datenbank aufteilen würden (aber Sie möchten dies nicht tun), könnte ich den Fall für die Verwendung eines separaten Kontexts sehen, aber nur, weil es tatsächlich zwei separate Domänen gibt.
In Bezug auf Mikrodienste ist ein einziger Kontext immer noch sinnvoll. Für Mikrodienste hätte jedoch jeder Dienst seinen eigenen Kontext, der nur die für diesen Dienst relevanten Datenbanktabellen enthält. Mit anderen Worten, wenn Dienst x auf die Tabellen 1 und 2 zugreift und Dienst y auf die Tabellen 3 und 4 zugreift, hat jeder Dienst seinen eigenen eindeutigen Kontext, der für diesen Dienst spezifische Tabellen enthält.
Ich interessiere mich für deine Gedanken.