Es klingt, als würden Sie über ein Lesemodell sprechen, das Sie einem Benutzer und nicht einem Aggregat präsentieren.
Es gibt verschiedene Möglichkeiten, wie Sie damit umgehen können:
Lokale Caching
Halten Sie eine In-Memory-Cache lokal in Ihrem Dienst, der zwischen AgencyID und AgencyTitle Karten - dies kann entweder durch:
- hören auf ein Ereignis (dh AgencyCreated). Dies wäre bevorzugt, wenn Sie ein ereignisgesteuertes System haben. Sie könnten auch andere Ereignisse (d. H. AgencyTitleUpdated) anhören, falls relevant.
- durch eine Web-Anfrage an die externen Dienste. Sie würden zuerst Ihren lokalen Cache abfragen und dann entscheiden, ob Sie den externen Service anrufen möchten. Sie müssen darüber nachdenken, wie veraltet Sie Ihren Cache werden lassen.
Entnormierung der Daten
Sie könnten die Daten duplizieren, indem die AgencyTitle neben dem AgencyID speichern. Auf diese Weise haben Sie keinen Anruf bei einem externen Dienst. Der Nachteil ist, dass Sie überlegen müssen, wie oft sich das AgencyTitel ändert und wie Sie mit dieser Änderung umgehen.
Reporting „Domain“
Sie könnten einen völlig separaten Dienst haben, um Daten von anderen Diensten zuhört und unterhält Ansicht Modelle für UIs. Dadurch würden Ihre anderen Dienste die Bedenken anderer Dienste ignorieren. Wenn Sie ein ereignisgesteuertes System verwenden, würden Sie nach Ereignissen aus anderen Diensten suchen, mit denen Sie ein Ansichtsmodell für die Benutzeroberfläche erstellen können.
Wie kann es Teil des Aggregats sein, aber nicht in der aktuellen Domäne vorhanden? – tomliversidge
@tomliversidge -Ich bin Neuling bei DDD und vielleicht stelle ich meine Frage schlecht, aber was ich brauche ist, mehr Daten von anderen 'Microservice' zu sammeln, die im aktuellen Dienst benötigt werden (zB wenn wir User-Avatar-Image von Avatar für Ein Benutzer. –