Opakování kódu v BaseControl a BasePresenter

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

BaseControl a BasePresenter jsou jediná místa, kde pravidelně mám stejný kód: nějaké definice základních komponent, helpery, šablony, …

Ideál by byl podstrčit BaseControl, tzn. \Nette\Application\UI\Control jako předka Presenter, což ale dynamicky moc dobře nejde.

Máte nějaký trik, jak to sjednotit?

Ondřej Mirtes
Člen | 1536
+
0
-

To je přesně ten důvod, proč je dědění zlo :)

Nejlepší řešení je co nejvíc kódu vyšoupnout mimo BasePresenter a BaseControl a z těch dvou se na ta místa odkazovat minimálním počtem řádků kódu.

Takže na šablony mít nějakou vlastní TemplateFactory, helpery mít mimo a do Presenter/Control je načítat pomocí nějakého HelperLoaderu. A společné komponenty si nějak neumím představit. Míval jsem dost tučné presentery i controly, ale společné createComponent* metody v obou jsem snad nikdy neměl.

Mikulas Dite
Člen | 756
+
0
-

Díky, to zní rozumně.

Víc komponent v obou mám třeba při rekurzivních použitích, kdy jednak musím volat komponentu z presenteru a potom i v komponentě samotné. (Když nechci obcházet Nette, reps. strom komponent)