Route styles staticke metody ⇒ protected
- fak
- Člen | 48
no jo, ale když tu třídu chci rozšířit, tak ty proměnný a funkce nemůžu v poděděný třídě používat:(
jo jinak tim „defaultně“ jsem myslel, že když vytvářim property pro
vnitřní použití ve třídě, tak místo private dám přednost protected,
protože nikdy nevím, kdy tu třídu budu dědit.
Nebo je to taky špatně?
Editoval fak (29. 11. 2012 9:04)
- Filip Procházka
- Moderator | 4668
Ano, děláš to nejspíš špatně. Porušuješ zapouzdřenost. To je něco jako když si to chceš udělat… taky nechceš, aby ti u toho máti lezla do koupelny. Nech těm třídám trochu soukromí ;)
Jiná otázka je, jestli by to co potřebuješ opravdu nemělo být spíše veřejné. Pokud to potřebuje více jak 1 člověk, mohl by to být signál pro zlepšení. Nebo naopak, že děláš něco co bys většinou neměl – hackuješ to.
Jinak, v Symfony se děje přesný opak – z protected dělají private, aby programátoři byli nuceni lépe navrhnout svou aplikaci ;)
Ovšem jestli $styles
myslíš to co si myslím, tak to se
dělá trochu jinak
$router[] = new Route('/<presenter>', array(
'presenter' => array( // styly!
Route::VALUE => 'Homepage',
Route::FILTER_IN => callback(...),
)
));
Editoval HosipLan (29. 11. 2012 10:36)
- Šaman
- Člen | 2659
Omlouvám se za offtopic, ale když si nejsem jistý, doporučuji protected.
- PRIVATE jen když se jdu udělat a vím, že u toho nikdo další být NESMÍ / NEMÁ.
- PUBLIC když se jedná o něco, co chci sdělit nebo NABÍDNOUT světu.
- Všechno ostatní je PROTECTED, protože velmi často potomek nějak potřebuje třeba jen rozšířit stávající implementační rutiny. A odhadnout, co je a co není čisté v potomcích přepisovat, to je úkol pro vědnu s křišťálovou koulí (viz velký počet požadavků private->protected v Nette). Myslím, že je čistější mít protected i to, co nebude nutné přepisovat (ale možné by to bylo), než dodatečně uvolňovat private metody.
- Vojtěch Dobeš
- Gold Partner | 1316
protected
je součásti API, private
nikoliv. Proto
je mnohem lepší dávat co nejvíc věcí privátních, není pak třeba
hledět na zpětnou kompatibilitu. A to je naprosto určující důvod,
alespoň pro mě dostačující.
Kromě toho mnohdy je lepší kompozice než dědění – nešla by aplikovat i na tento případ?
- fak
- Člen | 48
Šaman napsal(a):
Omlouvám se za offtopic, ale když si nejsem jistý, doporučuji protected.
Přesně tohle jsem si taky myslel:/
A odhadnout, co je a co není čisté v potomcích přepisovat, to je úkol pro vědnu s křišťálovou koulí
myslel jsem že právě pro tebe:D
Editoval fak (29. 11. 2012 13:58)
- fak
- Člen | 48
vojtech.dobes napsal(a):
protected
je součásti API,private
nikoliv. Proto je mnohem lepší dávat co nejvíc věcí privátních, není pak třeba hledět na zpětnou kompatibilitu.
Aha, díky za osvícení! To mi nedošlo:)
Kromě toho mnohdy je lepší kompozice než dědění – nešla by aplikovat i na tento případ?
Asi jo, ale nakonec jsem ten router musel celej stejně uplně přepsat s použitím některých kusů kódu z původního Routeru. A vůbec chtěl by přepsat uplně od znova jak se na něj nabalila hromada požadavků za celej rok. Původně jsem to chtěl zveřejnit jako doplněk SuperRouter ;-) ale za takovou prasárnu by se styděla i moje máma:/
Editoval fak (29. 11. 2012 14:04)
- Vojtěch Dobeš
- Gold Partner | 1316
Původně jsem to chtěl zveřejnit jako doplněk SuperRouter ;-) ale za takovou prasárnu by se styděla i moje máma:/
Taky jsem kolikrát zažil :).