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)