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

dms
Člen | 97
+
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 | 836
+
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.