2010-12-06 4 views
1

Ich habe eine Album-Klasse und eine Track-Klasse. Tracks können unabhängig von einem Album existieren, aber ein Album kann nicht ohne Tracks existieren.Ist dies eine Aggregations- oder Zusammensetzungsassoziation?

Ich denke, dass es eine Aggregation ist, weil Spuren nicht zerstört werden, wenn ein Album zerstört wird. Aber bestimmte Tracks, die zu einem bestimmten Album gehören, werden mit dem Album zerstört ... Kann also jemand das deutlicher machen?

Auch das ist Hausaufgaben, aber das ist nicht die eigentliche Frage. Wir machen eine große Modellierungsübung und dies ist ein einzelner Assoziationslink.

Antwort

6

In der Nicht-Hausaufgaben-Welt entscheiden hier die Anwendungsfälle über das Design.

Wenn Spuren unabhängige Einheiten sind und Alben Sammlungen von Spuren sind, ist das in Ordnung. In einem solchen System bedeutet das Löschen eines Albums jedoch nicht das Löschen der Titel.

... Es sei denn, Sie eine Option „löschen Titel mit Album“

hatte ... Oder Sie beschlossen, dass eine Spur nur dann gelöscht werden würde, wenn alle Alben nicht mehr enthalten sind.

... Und Sie hatten ein "un-categorised Tracks" Album, das nicht gelöscht werden kann.

Es klingt, als ob Sie bestimmen müssen, wie Sie Ihre Anwendung verwenden möchten, bevor Sie entscheiden, dass das Datenmodell das genaue Verwendungsmuster unterstützt, das Sie unterstützen möchten.

4

Ein Album ist eine Sammlung von Tracks. Ein Track ist null oder mehr Alben zugeordnet. Es gibt so etwas wie einen Track ohne ein Album. Als solches ist ein Album eine Aggregation von Tracks. Ein Track kann sich auf mehr als einem Album befinden (konzeptionell betrachtet man die Greatest Hits-Sammlungen!), Daher ist es eindeutig unangemessen, einen Track zu zerstören, weil das erste Album gelöscht wurde.

Wenn ein Objekt gleichzeitig in mehreren Sammlungen vorhanden sein kann oder unabhängig von dieser Sammlung vorhanden sein kann oder nicht zerstört werden soll, wenn es sich um eine Sammlung handelt, handelt es sich um eine Aggregation.

Warum möchten Sie die Titel zerstören, wenn Sie das Album zerstören? Wenn ein Track null oder einen Alben hat und nach dem Hinzufügen nie aus einem Album entfernt wird, ist die Komposition möglicherweise besser geeignet - aber das klingt mehr nach Aggregation und Ihre "Tracks", die zu einem bestimmten Album gehören, sollten zerstört werden mit dem Album "könnte nicht auf dem richtigen Weg sein. Die Zusammensetzung und die Aggregation sind hauptsächlich aus diesem Grund getrennt: Sie müssen sich bewusst sein, wann es unsicher ist anzunehmen, dass ein Objekt referenziert wurde, nur weil eine Sammlung es enthielt (es ist unsicher anzunehmen, dass für eine Aggregation nicht für eine Komposition), und wenn du etwas zerstören willst, nur weil seine Sammlung weg ist, dann ist es wahrscheinlich eine Komposition - aber wenn du es nicht so verwendest, ist wahrscheinlich irgendwo etwas schiefgelaufen.

2

Aus dem ersten Teil Ihrer Frage würde ich sagen, es ist keine Komposition. Wenn ein Titel sein Album überdauern kann, wird sein Lebenszyklus definitionsgemäß nicht von dem des Albums diktiert. Daher ist es keine Komposition.

Ich würde sogar in Frage stellen, ob es Aggregation ist - aber dann hängt das von Ihrer speziellen Definition von Aggregation ab, da es in der UML-Spezifikation so notorisch schlecht definiert ist.

Basierend auf den Informationen, die Sie ich mehr als als gerade viele wahrscheinlich Modell geben würde: viele Binary Association, auf der Grundlage, dass die Domain-Regeln Sie versuchen, sind zu erfassen:

  1. Jedes Album enthält eine oder mehrere Spuren
  2. Jede Spur kann in einem oder mehreren Alben vorkommen.

Allerdings ist es ein bisschen Ihrer Frage, die ich nicht wirklich verstehen:

Aber bestimmte Titel, die ein bestimmtes Album gehören, wird mit dem Album zerstört werden ...

Kannst du es ausarbeiten? Was unterscheidet einen Track, der mit seinem Album zerstört wurde von einem, der nicht zerstört wird?

hth.