Dependency Injection ve 2.1: Klíč factory v konfigurátoru
- David Grudl
- Nette Core | 8227
(Vyčleněno ze staršího příspěvku)
Ne zcela srozumitelný může být klíč factory
v definici
služeb, ještě hůře v definici továrniček:
services:
authorizator:
create: App\Authorizator(...)
factories:
latte:
create: Nette\Latte\Engine
implement: ILatteFactory
Stálo by za zvážení jej změnit třeba na create
: (tj.
držet se popisu pomocí sloves create, setup, implement namísto podstatným
jmen factory, methods*, interface).
services:
authorizator:
create: App\Authorizator(...)
factories:
latte:
create: Nette\Latte\Engine
implement: ILatteFactory
(Poznámka: create
používat jako alias pro
factory
už lze, bavím se spíš o best practices)
- enumag
- Člen | 2118
@hrach: Gratuluji, já si teď uvědomil, že to nechápu.
V dokumentaci je tento příklad:
services:
database:
class: Nette\Database\Connection
create: DbFactory::createConnection
To je celkem jasné, Connection bude vytvořeno statickou metodou
DbFactory::createConnection. Ale co proboha ten klíč factory:
udělá když mu nedám metodu, ale třídu? Přejmenování na create mi
nepomáhá, stále nechápu význam. Jaký je rozdíl mezi:
services:
authorizator:
create: App\Authorizator(...)
a
services:
authorizator:
class: App\Authorizator(...)
?
- Aurielle
- Člen | 1281
@enumag: pleteš do sebe dvě trošku odlišné věci
(říkám to teoreticky, sám to taky nemám vyzkoušené). Důležité je tam
to implement
, což značí DIC továrničku. HosipLan to pěkně
vysvětloval na
Planette.
- David Grudl
- Nette Core | 8227
class
říká, co továrna vrací. Pokud je to jakkoliv
detekovatelné, nemusí se uvádět. class: App\Authorizator(...)
je tedy špatně.