Nette\String – odstraneni final
- juzna.cz
- Člen | 248
Urcite to stve vice lidi, nez jen me. Byl bych rad, kdyby trida Nette\String nebyla final a ja ji mohl podedit a pridat dalsi metody (u me jsou to napriklad: camelize, uncamelize, getFirstLine, getLastLine, …).
Tyto funkce nejsou potrebne vzdy a vsude, nektere jsou i dosti typicke pro konkretni problem. Nema smysl je tedy davat do mainstreamove Nette\String.
V soucasnosti si je muzu dat do vlastni tridy String bez podedeni z nette, ale:
- proc mit dve tridy na praci se stringy? Kdo si ma pamatovat, ze startsWith je v prvni a camelize v druhe??
- zkopirovat si veskere metody z Nette\String – ale to neni moc pekne reseni
- pouzit __callStatic a z nej volat Nette\String – to mi pak ale IDE nebude napovidat
Vyvratte moje pripominky nebo podporte muj pull request
- Filip Procházka
- Moderator | 4668
Yes we can!
+++ pro všechny třídy v tools! další na pořadí je ArrayTools
Editoval HosipLan (19. 3. 2011 13:47)
- juzna.cz
- Člen | 248
Nebyl bych az zas tak radikalni s odstranovanim vsech final, myslim ze jsem se o tom bavil s Davidem na unorove posledni sobote a mel nejake dobre duvody, proc to nekde nechat (uz ale presne nevim, bylo hodne pozde).
Pokud mate navrh na odstraneni final i u jinych trid, tak posilejte reporty proc by tam nemel byt a ukazky vasich podedenych trid, jako dukaz ze to opravdu ma smysl.
- westrem
- Člen | 398
Naprosty suhlas s juzna.cz
U Nette\String som musel rucne zrusit final
aby som ju mohol
podedit a mat veci pekne pokope, bolo to jedno z final, ktore ma zaskocilo.
Na druhej strane nie som za rusenia final
, len preto ze su
final
, to je absurdny argument a su triedy, kde to
final
ma opodstatnenie (myslene vo vseobecnosti).
Nette\String, je vsak ukazkovy priklad na to, kde ma vela ludi potrebu
rozsirovat ju a pridavat vlastnu custom funkcionalitu, ktora nepatri priamo do
FW a extend
je v tomto pripade ten pravy kandidat.
- Mikulas Dite
- Člen | 756
Nesouhlasím. Final podle mě nemá opodstatnění prakticky nikdy. Pokuď si
vývojář potřebuje něco ohnout, musí takhle vrtat v Nette, případně
jenom copy and paste. Souhlasím s argumentem, že je dobré, že
taková knihovna potom nutí uživatele k tomu správnému řešení (ideální
příklad je konstruktor komponent vs startup metoda). To je dobré, pokud
nějaké řešení existuje. Trošku nevhodné, pokud jiný způsob
není, jako v případě Tools
.
- Filip Procházka
- Moderator | 4668
Podle mně má opodstatnění u tříd/struktur, které, jak píše David, nejsou připravené pro rozšiřování, nebo záměrně nechce, aby se je někdo pokoušel rozšiřovat, protože počítá s jejich odstraněním/refaktoringem, kvůli forward-compatibility (ano, to „slovo“ jsem si právě vymyslel). A nebo kvůli vynucení Composition
Ale takový Nette\String
nebo Nette\ArrayTools
se
určitě už moc měnit nebudou…
Editoval HosipLan (20. 3. 2011 0:26)
- Honza Marek
- Člen | 1664
Taky kdyby někdo chtěl vyrobit mock v PHPUnitu, ta ta třída nesmí být final a pokud možno by neměla mít ani final metody. Tohle sice není případ statických tříd jako je String, ale je dobré to zvážit, pokud někde final píšu.