Obecná továrna nebo pro každou komponentu vlastní?
- dms
- Člen | 94
Ahoj mám dotaz ohledně správného použití továren na komponenty. Máme v jedné aplikaci v basepresenteru následující generátory na gridy, formy a další komponenty:
protected function createComponentGrid()
{
return new Multiplier(function ($gridName) {
return $this->gridFactory->create($gridName);
});
}
protected function createComponentForm()
{
return new Multiplier(function ($formName) {
$return $this->formGeneratorFactory->create($formName);
});
}
v jakékoli šabloně se pak používá {control form-login}
{control form-article}
apod. Obecně je to jednoduché na
použití, ale všude je dostupné všechno a není jasné když vlezu do phpka
nějakého presentru jaké používá a generuje komponenty a funguje to tak
nějak magic. Doporučovaný postup z nette dokumentace, kdy má každá
komponenta svoji továrnu a v presenteru si vždy injectnu pouze konkrétní
faktorky s kterými presenter pracuje je samozřejmě více psaní, ale mnohem
transparentnější. Je správné mít tyto věci takto globálně generované
jednou továrnou?
- Kamil Valenta
- Člen | 820
Pokud je to komponenta, která se generuje na konkrétní stránce, nechal bych ji v konkrétním presenteru.
Pokud je to komponenta, která se generuje na všech stránkách (v hlavičce nebo patičce), nechal bych ji v basepresenteru.
- David Matějka
- Moderator | 6445
Raději bych se tomuto způsobu vyhnul a šel konzervativní cestou specifických továren pro každou komponentu. Krom magie je tam i víc problémů, třeba že ti nepůjde snadno 2× vytvořit stejnou komponentu bez toho, abys ji 2× přidával v té „globální“ factory.