614 Stimmen

Was ist eine Aggregatwurzel?

Ich versuche zu verstehen, wie man das Repository-Muster richtig einsetzt. Das zentrale Konzept einer Aggregatwurzel taucht immer wieder auf. Wenn ich im Web und bei Stack Overflow nach Hilfe suche, was eine Aggregatwurzel ist, finde ich immer wieder Diskussionen über sie und tote Links zu Seiten, die Basisdefinitionen enthalten sollen.

Im Zusammenhang mit dem Repository-Muster, was ist eine aggregierte Wurzel?

18voto

Captain Kenpachi Punkte 6718

Wenn Sie einen datenbankbasierten Ansatz verfolgen, ist die aggregierte Wurzel normalerweise die Tabelle auf der 1-Seite einer 1-many-Beziehung.

Das häufigste Beispiel ist eine Person. Jede Person hat viele Adressen, eine oder mehrere Gehaltsabrechnungen, Rechnungen, CRM-Einträge usw. Das ist nicht immer der Fall, aber in 9/10 der Fälle ist es so.

Wir arbeiten derzeit an einer E-Commerce-Plattform, und wir haben im Grunde zwei aggregierte Wurzeln:

  1. Kunden
  2. Verkäufer

Kunden liefern Kontaktinformationen, wir ordnen ihnen Vorgänge zu, Vorgänge erhalten Einzelposten usw.

Verkäufer verkaufen Produkte, haben Kontaktpersonen, "Über uns"-Seiten, Sonderangebote usw.

Diese werden jeweils vom Kunden- und vom Verkäufer-Repository übernommen.

17voto

Ibrahim Malluf Punkte 639

Dinah:

Im Kontext eines Repositorys ist die Aggregatwurzel eine Entität ohne übergeordnete Entität. Sie enthält null, eine oder viele Kind-Entitäten, deren Existenz von der übergeordneten Entität abhängt, um ihre Identität zu erhalten. Das ist eine One To Many-Beziehung in einem Repository. Diese Kind-Entitäten sind einfache Aggregate.

enter image description here

15voto

Otávio Décio Punkte 72052

En DDD Schritt für Schritt (offline):

Innerhalb eines Aggregats gibt es eine Aggregatwurzel. Die Aggregatwurzel ist die übergeordnete Entität für alle anderen Entitäten und Wertobjekte innerhalb des Aggregat.

Ein Repository arbeitet mit einer Aggregatwurzel.

Weitere Informationen finden Sie auch unter aquí .

3voto

Im Aggregat schützen Sie Ihre Invarianten und erzwingen Konsistenz, indem Sie den Zugriff auf das Aggregat Root beschränken. Vergessen Sie nicht, Aggregat sollte auf Ihr Projekt Geschäftsregeln und Invarianten zu entwerfen, nicht Datenbank-Beziehung. Sie sollten nicht injizieren jedes Repository und keine Abfragen sind nicht erlaubt.

0voto

Marian Venin Punkte 111

In einer anderen Welt, im Event Sourcing, ist ein Aggregat (Root) ein anderes Konzept. Event Sourcing kann zusammen mit CQRS, DDD usw. vorkommen.

Beim Event Sourcing ist ein Aggregat ein Objekt, dessen Zustand (Felder) nicht auf einen Datensatz in einer Datenbank abgebildet wird, wie wir es aus der SQL/JPA-Welt gewohnt sind.

Ist keine Gruppe von verbundenen Unternehmen.

Es handelt sich um eine Gruppe von Bezugsdatensätzen wie in einer Verlaufstabelle.

GiftCard.amount ist ein Feld in einem GiftCard Aggregat, aber dieses Feld wird allen Ereignissen zugeordnet, wie z.B. card-redeemed (Geld von der Karte nehmen), die jemals erstellt wurden.

Die Datenquelle für Ihr Aggregat ist also nicht ein Datensatz in einer Datenbank, sondern die vollständige Liste der Ereignisse, die jemals für dieses spezifische Aggregat erstellt wurden. Wir sagen, dass wir das Aggregat als Ereignisquelle nutzen.

Nun können wir uns fragen, wie das geht? Wer aggregiert diese Ereignisse, so dass wir immer noch mit einem Feld arbeiten, z. B. GiftCard.amount? Wir könnten erwarten, dass der Betrag eine Auflistung und kein großer Dezimaltyp ist.

Ist die Event-Sourcing-Engine, die die Arbeit macht, die einfach alle Ereignisse in der Erstellungsreihenfolge wiedergeben könnte. Aber das ist außerhalb des Rahmens für diesen Thread.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X