Traity jsou reusable kódu udělané správně.
Třeba takové C++ na reusable používá dědičnost, protože nic jiného nemá. Což ale zpětně vyvolává dojem, že je to správně, což, jak víme, není.
C# má alespoň rozhraní. Ale nemá traity. Takže když potřebuješ reusable kódu co uděláš?
1/ injektáš - jenže ty ne vždy chceš umožnit měnit implementaci. Navíc to vytváří příliš velkou volnost, což ne vždy je žádoucí.
2/ vytvoříš inplace instanci - jenže to znamená, že ta třída musí být veřejná (v C# nemusí, v PHP musí)
3/ dědičnost - výhoda je ve vhodném těsném vztahu. Nevýhoda, že skáčeš jak blbec skrz pět úrovní dědičnost. Hlavně to ale vytváří nežádoucí vztah "is".
V C# je, asi, nejvhodnější vytvoření privátní třídy, čímž simuluješ reusable. Problém vidím v tom, že děláš něco jiného, než co potřebuješ. V PHP napíšu traitu, a tam narvu všechno co potřebuju sdílet napříč třídami. Jasně a srozumitelně tím deklaruju o co mi jde. Vulgárně řečeno děláš dědičnost bez dědičnostil = to chceme.
Pak je samozřejmě už jen na mé soudnosti, jak moc to rozfrcám. Zneužít se dá všechno.
28. 5. 2025, 17:56 editováno autorem komentáře
A nejaky konkretni priklad na cos to pouzil ?
(me nejde do hlavy tohle - bud tam jsou ortogonalni featury - a na to pak staci nejaky struct/wrapper, anebo featury nejsou ortogonalni, ale pak si jako nejaky trait saha do properties ktere ani nema definovane?)
28. 5. 2025, 17:59 editováno autorem komentáře
Vytvářel jsem skupinu grafických tříd: Scalar, Record, Collection, ... Každá měla specifické chování, ale každá z nich měla metody/prvky name, label, description, help, ... a další. Vytvořil jsem si traity jako ControlBaseUnit, ControlRulesUnit, ControlTransformationUnit.
Ve vlastní třídě tam pak zůstalo jen to, co nebylo společné.
28. 5. 2025, 18:08 editováno autorem komentáře
Obhájit se musí vždycky všechno. To je tak nějak normální.
Že by "Většinou zjistím, že se daný problém dá řešit elegantněji a úsporněji." se mi nechce moc věřit.
To spíš, že programátor ze samého nadšení "jů traity", je používá nesmyslně. Což je, opět, normální.
Naštěstí přehnané použití traitů není tak škodlivé, jako dědičnost.