Injectování formulářů přes factory vs přes service interface

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ondrej.svec
Člen | 3
+
0
-

Ahoj,

může mi prosím někdo vysvětlit rozdíl, kdybych si formuláře zaregistroval jako factories
oproti tomu, když si vytvořím interface s metodou create(), který zaregistruji jako service?

Proč bych měl používat který způsob? Který je lepší?

EDIT:
Nejde to udělat jenom tak, že bych zaregistroval formulář jako factory a DI mi tam nastrkal závislosti sám?

Proč bych měl zbytečně vytvářet nějaké továrničky (interfacy), když bych (podle mě) mohl do DI zaregistrovat přímo formuláře?

Editoval ondrej.svec (25. 6. 2014 13:02)

Michal Vyšinský
Člen | 608
+
+2
-

Ahoj,

generované factories (interface s metodou create) v naprosté většině případů stačí. Výhoda je v tom, že závislosti formuláře máš jen v konstruktoru samotného formuláře (na jednom místě). Nette samo vytvoří implementaci toho interface a postará se o předání závislostí.

Vlastní factory se může hodit tam, kde potřebuješ nějakou složitější logiku pro vytváření určitého formuláře. Výhodou může být větší flexibilita, nicméně máš pak závislosti vypsané jak v konstruktoru factory, tak v konstruktoru formuláře. Když se něco změní, tak musíš přidat závislost na dvou místech.

Šaman
Člen | 2665
+
0
-

V novém Nette už factories nejsou, jen generované továrny (to jsou ty interfejsy). Když zaregistruješ formulář rovnou jako službu, tak můžeš použít je jedinou instanci toho formuláře (často to stačí, ale obecně se komponenty mají vytvářet pomocí factory).