Route styles staticke metody ⇒ protected

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
fak
Člen | 48
+
0
-

Pokud dědím od Route, tak nemůžu používat filtry, které jsou definované jako privátní statické metody a musím si je kopírovat do tříd. Kdyby byly protected, tak zmizí nutnost je kopírovat.

fak
Člen | 48
+
0
-

a vůbec, všechny metody a properties by měly bejt defaultně protected. Používání private je egocentrický!

Filip Procházka
Moderator | 4668
+
0
-

a vůbec, neměly :)

fak
Člen | 48
+
0
-

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
+
0
-

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)

fak
Člen | 48
+
0
-

Aha, tak to většinou chci hackovat:/
Musím změnit přístup. Snažil jsem se Router brutálně rozšířit, ale je z něj teď spíš takovej posranej chameleon i když fachá.

Editoval fak (29. 11. 2012 10:52)

Šaman
Člen | 2666
+
0
-

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
+
0
-

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
+
0
-

Š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
+
0
-

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
+
0
-

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 :).