# Was ist ein Aggregate



## Generic1 (7. Mrz 2010)

Hallo,

kann jemand mit dem Befriff Aggregate was anfangen. Wann setzt man solche Aggregate ein?
In dem Buch das ich lese steht, ein Aggregate ist ein Cluster von zusammengehörigen Objekten, die man als Einheit betrachten kann und jedes Aggregate hat ein root und ein boundary.

Ein externes Objekt darf nur auf das root zugreifen aber vom Aggregate aus darf aus soviele andere Objekte wie gewünscht zugegriffen werden.
Ich frag mich jetzt da, wie man das realisiert und was das bringen soll.
Besten Dank für Erklärungen.

lg


----------



## ThreadPool (7. Mrz 2010)

Naja, ein Aggregat ist das was du beschrieben hast. Eine Zusammensetzung aus anderen Objekten.
Im Prinzip verwendest du also die Implementation der anderen Objekte um ein größeres Objekt mit
bestimmten Verhalten zu erzeugen. Diese Zusammensetzung hat verschiedene Ausprägungen die 
nennen sich Aggregation und Komposition.

Kleines Beispiel: 

Stack ist ein Aggregat und die Zusammesetzung erfolgt als Komposition.

```
public class Stack {
    private LinkedList list;
    public Stack() {
        list = new LinkedList();
    }
...
}
```


----------



## Generic1 (7. Mrz 2010)

OK, ich hab alles Verstanden bis auf das Beispiel, Du hast eine Klasse Stack gemacht und in einem Objekt dieser Klasse Stack ist ein weiteres Objekt "LinkedList" enthalten.
So weit ist es mir klar, mir ist jetzt nicht ganz klar wo da der in dem Buch beschriebene root und die boundarys sind. 
Was mir klar ist, dass die LinkedList nicht ohne ein Stack- Objekt leben kann, kann man dann dazu sagen, dass es sich um eine Aggregation handelt?


----------



## ThreadPool (7. Mrz 2010)

Generic1 hat gesagt.:


> OK, ich hab alles Verstanden bis auf das Beispiel, Du hast eine Klasse Stack gemacht und in einem Objekt dieser Klasse Stack ist ein weiteres Objekt "LinkedList" enthalten.
> So weit ist es mir klar, mir ist jetzt nicht ganz klar wo da der in dem Buch beschriebene root und die boundarys sind.
> Was mir klar ist, dass die LinkedList nicht ohne ein Stack- Objekt leben kann, kann man dann dazu sagen, dass es sich um eine Aggregation handelt?




Da ich dein Buch nicht kenne, kann ich nur vermuten was mit "root" und "boundarys" gemeint ist. Ich
tippe mal darauf, dass das Zusammengesetzte Objekt (Stack) als "root" bezeichnet wird und mit
"boundarys" die Objektgrenzen (von Stack) gemeint sind. Und zu deiner zweiten Frage da die
 Komposition eine spezielle Form der Aggregation ist, kann man sagen das es sich um eine
Aggregation handelt. Du solltest aber Bedenken, dass wenn jmd das Wort Aggregation verwendet er
meist nicht die starke Form, also Komposition, meint.


----------



## maki (7. Mrz 2010)

Generic1, solltest schon sagen dass du von DDD sprichst, denn Aggregation und  "Aggregate" im Sinne von DDD sind nicht dasselbe 

Deswegen hilft dir ThreadPools Antwort auch nicht wirklich, diese bezieht sich nämlich auf Aggregation.
Vielleciht ghilft dir das heir:DDD: Aggregates and Aggregate Roots - Jak Charlton - Insane World - Devlicio.us - Just the Tasty Bits


----------



## Generic1 (8. Mrz 2010)

@maki:

Besten Dank für den Link, was ich noch nicht ganz verstanden habe ist dieser Satz:
>> Each Aggregate is treated as a single unit for persistence purposes.

Ein Aggregate gehört zusammen, dass ist mir klar aber das "for persistance purposes" ist mir nicht klar, 
Heißt das, dass ich das ganze Aggregate- Objekt in einem in eine Datenbank speichere (das kanns jetzt nicht sein, das war aber mein erster Gedanke).??


----------



## SlaterB (8. Mrz 2010)

das heißt nicht, dass der ganze Verbund in eine Tabelle stehten muss, 
aber wenn man Speichern dafür aufruft, dann läuft eine komplexe Logik an, die alle Teile des Aggregats einzeln speichert oder zumindest mit dem DB-Stand vergleicht


----------

