2016-07-23 13 views
0

Ich habe ein Aggregat in meiner Domäne, die einige Guid sekundären Schlüssel haben. Ich möchte mehr Informationen über diese Schlüssel aus anderen Domänen über RESTfull erhalten.Erstellen Sie ein Gesamtobjekt RESTfully

public class ProductAggregate 
    { 
     public Guid Id { get; set; } 
     public Guid UserId { get; set; } 
     public Guid AgencyId { get; set; } 
     public string AgencyTitle { get; set; } 
} 

In obigem Code besteht die AgencyTitle nicht in der aktuellen Domäne und ich möchte es von einem anderen Live-Dienst über Erholsamer erhalten und aggregierte Objekt an den Client zu senden. Ist es ein akzeptabler Weg?

+0

Wie kann es Teil des Aggregats sein, aber nicht in der aktuellen Domäne vorhanden? – tomliversidge

+0

@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. –

Antwort

4

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.