Wir reden hier glaub ich an einander vorbei. Häng dich nicht an den Konkreten Beispielen im Video auf.
Meine Aussage war: extends wird oft nicht sinnvoll eingesetzt. Sogar Profis machen das Falsch, hier als Beispiel Offizielle PayPal API https://github.com/paypal/PayPal-PHP...lib/PayPal/Api jede dieser Klasse wird von PayPalModel abgleitet. Weiso? Weil dadurch haben die Zugriff auf fromArray/toArray plötzlich erhält jede dieser Klasse eine Zweite Responsibility und zwar daten hydration.
Hier wären die mit einem Trait besser dran gewesen, korrekt wäre es aber eher den Hydrator injezieren. WIeso besser? PayPalModel hat eine zu starke Abhängigkeit,bzw zu viele Klassen sind von ihr abhägngig, dadurch kann man die Klasse schlecht Verändern. Außerdem kriegen dadurch die Klassen eine weitere Verantwortung und dadurch verletzt man Single Responsibility Prinzip.
Extends ist eben nicht so einfach umzusezten, neben diesem Beispiel, müsste man noch auf Liskovs Substitutions Prinzip achten. Es ist ein Komplexes Thema und man kann mit einem Trait einen Shortcut machen. Auf diesen Shortcut wollte ich hinweisen, ich habe auch gesagt, dass ich meine Klassen sofort mit final initialisiere so dass diese erst garnicht abgeleitet werden.
Naja und titel passt ja dann nicht. Ich habe ja nicht gesagt, wann sondern wieso, weil es zu kompliziert ist Und "Darum nutze ich KAUM Extends" :P
Meine Aussage war: extends wird oft nicht sinnvoll eingesetzt. Sogar Profis machen das Falsch, hier als Beispiel Offizielle PayPal API https://github.com/paypal/PayPal-PHP...lib/PayPal/Api jede dieser Klasse wird von PayPalModel abgleitet. Weiso? Weil dadurch haben die Zugriff auf fromArray/toArray plötzlich erhält jede dieser Klasse eine Zweite Responsibility und zwar daten hydration.
Hier wären die mit einem Trait besser dran gewesen, korrekt wäre es aber eher den Hydrator injezieren. WIeso besser? PayPalModel hat eine zu starke Abhängigkeit,bzw zu viele Klassen sind von ihr abhägngig, dadurch kann man die Klasse schlecht Verändern. Außerdem kriegen dadurch die Klassen eine weitere Verantwortung und dadurch verletzt man Single Responsibility Prinzip.
Extends ist eben nicht so einfach umzusezten, neben diesem Beispiel, müsste man noch auf Liskovs Substitutions Prinzip achten. Es ist ein Komplexes Thema und man kann mit einem Trait einen Shortcut machen. Auf diesen Shortcut wollte ich hinweisen, ich habe auch gesagt, dass ich meine Klassen sofort mit final initialisiere so dass diese erst garnicht abgeleitet werden.
Naja und titel passt ja dann nicht. Ich habe ja nicht gesagt, wann sondern wieso, weil es zu kompliziert ist Und "Darum nutze ich KAUM Extends" :P
Kommentar