Rolf B: Welches Entwurfsmuster steckt in Traits

Beitrag lesen

problematische Seite

Hallo 1unitedpower,

So wird es auch im Decorator-Pattern gemacht

Ja, sicher. Ich habe aber bewusst darauf verzichtet, den Decorator als mögliches Pattern für eine Trait-Implementierung zu bezeichnen, weil es in beiden möglichen Richtungen logisch nicht passt.

(1) Der Trait dekoriert das Nutzerobjekt: Das ist ein vom Schwanz her aufgezäumtes Pferd. Traits sind wiederverwendbar und sollten vom Nutzerobjekt nicht mehr wissen als unbedingt nötig. Ein Trait, der ein Objekt dekoriert, muss aber die gesamte public-Schicht dieses Objekts durchleiten. Geht gar nicht.

(2) Das Nutzerobjekt dekoriert den Trait: Das widerspricht der Idee, dass ein Dekorator dazu dient, ein Objekt zu erweitern, das an sich eigenständig nutzbar und vollständig ist. Der Trait ist kein solches Objekt. Hinzu kommt, dass ein dekoriertes Objekt nichts davon merken sollte, dass es dekoriert wird. Viele Traits benötigen aber Elemente der nutzenden Klasse (was in PHP durch ein geteiltes $this und durch ”just use it“ implementiert wird und aus meiner Sicht eine architektonische Schlangengrube darstellt).

Rolf

--
sumpsi - posui - clusi