Opakování kódu v BaseControl a BasePresenter

- Mikulas Dite
 - Člen | 756
 
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
 
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
 
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)