Používat továrnu u komponent VŽDY nebo ne?

reprona
Člen | 6
+
0
-

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

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.

reprona
Člen | 6
+
0
-

Paráda Davide, díky za pěkné objasnění :)