funkce $form->getRenderer je final

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

Ahoj,
Potrebujeme na nasich projektech nejak univerzalne nastavovat renderer u formularu, a tak jsme si udelali potomka tridy Form ve kterem renderer nastavujeme. Nejlepsi metodou na prepsani se mi jevi getRenderer(), ale narazil jsem na to, ze je final. Je pro to nejaky zavazny duvod? Bylo by mozne to zmenit?

Diky moc

v6ak
Člen | 206
+
0
-

Nejlepší způsob se mi jeví (v případě potomka) takovéto věci nastavit v konstruktoru. Pokud se obecně snažíš přepisovat gettery, pak je asi něco špatně.
Další možnost je podobně použít factory method.

Ondřej Mirtes
Člen | 1536
+
0
-

Jojo, prostě v konstruktoru formuláře uveď $this->setRenderer(new MyRenderer);.

arron
Člen | 464
+
0
-

Samozrejme, ze to nakonec skoncilo v konstruktoru, ale tam je to de-facto navic. Uz jenom proto, ze kdyz se formular zpracovava, tak v drtive vetsine pripadu probehne po zpracovani redirect a v tom pripade se v konstruktoru deje docela dost veci naprosto zbytecne a navic. Chtel bych takoveto nastaveni dat na misto, kde je to nejlogictejsi a to je bud $form->render(), ale u te je problem, ze se nemusi volat vzdy (napriklad $form->__toString() ji nevola) a pak je proste uplne nejlogictejsi to dat do $form->getRenderer(), protoze proste kdyz je renderer potreba, tak se vytvori a nastavi se mu parametry, jake ma mit. Delat to jindy je podle me spatne.

Proc by melo byt spatne prepisovat gettery? Vzdyt od toho by (mimo jine) prece mely byt, aby se v nich daly delat nejake operace navic nez tupe vraceni nejake hodnoty.

Ondřej Mirtes
Člen | 1536
+
0
-

Ty chceš přepsáním getteru dojít k tomu, k čemu slouží setter. Je to prostě divoké.

v6ak
Člen | 206
+
0
-

Zapouzdření: Form má v sobě nějaké hodnoty (vlastnosti), které nějak používá a má je nějakým způsobem uložené a navíc k některým umožňuje přístup přes getter a/nebo setter metody. Není kdekoli psáno, že zevnitř k nim musí přistupovat přes getter metody. A navíc, překrývat public metodu, která je již zamýšlená jako funkční je takové…
Lehce s tím souvisí i myšlenky typu „buď final, nebo abstract“.

Honza Marek
Člen | 1664
+
0
-

v6ak napsal(a):

Lehce s tím souvisí i myšlenky typu „buď final, nebo abstract“.

Takové myšlenky jsou i u metod a nejen u presenterů? Já se vždycky divil, proč jsou lidi líný si překrýt metodu, když potřebují nějakou další funkčnost. A ony jsou za tím myšlenky!

v6ak
Člen | 206
+
0
-

No vidím tam i určitou podobnost s (nejen) Presentery.

Ale podobná myšlenka byla přímo vyslovena i pro metody: http://blog.krecan.net/…-api-design/ .