User Tools

Site Tools


technology:domainmodel:aggregate

Aggregate

Ein Aggregate ist eine Gruppe von Entitäten und Value Objects die wichtige Business Logik umsetzt und die Einhaltung von Business Regeln, sogenannten Invariants, sicher stellt. Es gibt das Hauptobjekt, die Aggregate Root, die eine globale Identität hat. Wenn man einen Befehl an die Domäne senden möchte, wird eine Aggregate Root über die globale Identität von einem Repository geladen, und die entsprechende Methode wird in dem Aggregate aufgerufen. Die AggregateRoot kann nun ihre eigenen privaten Methoden sowie die Methoden der beinhalteten lokalen Entitäten und Value Objects verwenden, um die Methode auszuführen. Es kann ebenfalls Methoden der Objekte verwenden, die an die aufgerufene Methode von der Applikationsschicht übergeben wurde.

Die Kunst des Entwurfs

Aggregates zu entwerfen ist nicht einfach. Im Grunde war für mich bisher die Datenbank immer das globale Aggregate, und wenn es galt, eine Regel einzuhalten, wurde eine Transaktion um die Änderungen gepackt. Solange man immer alles in einer Datenbank hat, ist das auch machbar, und man kann die Aktionen so optimieren, dass trotz Transaktionen ein paralleles Arbeiten möglich ist, ohne dass alles serialisiert wird.

Wenn man die Domäne in Aggregates aufteilt, gibt man die globale Konsistenz auf. Man gewinnt eine sauberere Domäne, die wartbarer ist, weil sie in überschaubare, verdaubare Einzelteile unterteilt wurde. Die Projektstruktur ist ein Beispiel für die Abwägungen und Konsequenzen beim Aggregate Design.

technology/domainmodel/aggregate.txt · Last modified: 2013/02/19 09:47 by rtavassoli