Das Attachment-Pattern (Attachment-Entwurfsmuster) wurde von mir im Rahmen meiner Master-Thesis entwickelt und fand relativ viel Anklang bei anderen Entwicklern, daher stelle ich es heute der Allgemeinheit vor.
Das Attachment-Entwurfsmuster gehört zu den Strukturmustern und verwendet die Komposition um eine Basisklasse um Eigenschaften und Assoziationen zur Laufzeit zu erweitern. Die folgende Abbildung zeigt das Muster und wird nachfolgend erläutert.
Bestandteile
- Das AttachableObject kann um Attachment-Objekte erweitert werden und kann selbst über ein ReferenceAttachment-Object referenziert werden.
- Das Attachment ist abstrakt und muss mindestens ein Attribut beinhalten der die Art des Attachments identifiziert.
- Das PropertyAttachment wird benutzt um ein AttachableObject um ein Attribut (Property) zu erweitern. Das Attribut value vom Typ T beinhaltet den Wert des Attributes
- Das ReferenceAttachment wird benutzt um ein AttachableObject um eine Assoziation zu erweitern.
Vorteile
- Dynamische Erweiterungen zur Laufzeit. Attribute und Assoziationen die zur Designzeit noch nicht bekannt waren, können nachträglich realisiert werden, ohne eine Änderung am Code vornehmen zu müssen.
Nachteile
- Gefahr des Wildwuchses von Attachments. Dem kann entgegen gewirkt werden durch eine Komponente, welche die erlaubten Attachments verwaltet.
- Nachträgliche Integration in das Domänenmodell. Attachments sollten spätestens bei einem Major-Release der Software aufgelöst werden und in das Domänenmodell integriert werden. Dies wirkt ebenfalls der Gefahr von Wildwuchs entgegen.