Používat továrnu u komponent VŽDY nebo ne?
- reprona
- Člen | 6
Zdravíčko,
dnes jsme měli s kolegou diskusi, jestli používat na tvorbu komponent VŽDY továrnu, či nikoliv. V čem teda tkví hlavní gró, protože já jsem zvyklý na každém místě v kódu komponenty pomocí továren vytvářet.
Předávám si např. IOnlineMemberFactory
namísto čistého
objektu UI\Control OnlineMember
. Zeptám se tedy ještě jednou, co
tedy zajišťuje továrna, krom toho, že vytvoří instanci? Podle mě např.
i továrna správně propojí komponentu s presenterem.
Díky.
- David Matějka
- Moderator | 6445
začnu odzadu:
Podle mě např. i továrna správně propojí komponentu s presenterem.
v kontextu komponent se „továrnou“ nazývá i metoda createComponentXXX, která vrací instanci komponenty. po návratu z této metody dochází k propojení s presenterem. Factory na samotnou instanci komponenty (tedy to IOnlineMemberFactory s metodou create) k presenteru nic nepřipojuje.
Zeptám se tedy ještě jednou, co tedy zajišťuje továrna, krom toho, že vytvoří instanci
vytvoří instanci :) správně nakonfigurovanou a se správnými závislostmi. a pokud bys komponentě přidal nějakou závislost (třeba tam budeš chtít cachovat, tak přidáš závislost na IStorage), tak díky továrně nemusíš na všech místech měnit to, jak se komponenta vytváří
Předávám si např. IOnlineMemberFactory namísto čistého objektu UI\Control OnlineMember
alternativou (a tou „jednodušší“ variantou) předávání factory
není předávání přímo té komponenty, ale vytvoření její instance
in-place. tedy že v createComponentXXX budeš mít
new OnlineMember(...)
. Nikdy neregitruj komponentu do DI kontejneru
jako službu, to způsobí problémy (například půjde použít pouze jednou
během requestu)
a k samotné otázce
Používat továrnu u komponent VŽDY nebo ne?
nic tím rozhodně nezkazíš :) osobně továrny používám v naprosté většině případů. výjimkou jsou snad jen komponenty, které jsou velmi jednoduché, nemají žádné závislosti a ani nehrozí, že nějaké závislosti mít budou.