Obecná továrna nebo pro každou komponentu vlastní?

dms
Člen | 94
+
0
-

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
+
0
-

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
+
+3
-

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.