Dependency Injection ve 2.1: Klíč factory v konfigurátoru

Upozornění: Tohle vlákno je hodně staré.

před 7 lety

David Grudl
Nette Core | 7148
+
0
-

(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:
		factory: App\Authorizator(...)

factories:
	latte:
		factory: 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)

před 7 lety

hrach
Člen | 1818
+
0
-

Super, konecne to chapu. Urcite prejmenovat :))

před 7 lety

enumag
Člen | 2129
+
0
-

@hrach: Gratuluji, já si teď uvědomil, že to nechápu.

V dokumentaci je tento příklad:

services:
    database:
        class: Nette\Database\Connection
        factory: 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(...)

?

před 7 lety

Aurielle
Člen | 1283
+
0
-

@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.

před 7 lety

castamir
Člen | 630
+
0
-

@Aurielle jsem asi slepý, ale v příkladu od @hosiplana nevidím to create / factory… přidávám se k @enumag, taky nějak nechápu, jaký to factory / create má význam

před 7 lety

David Grudl
Nette Core | 7148
+
0
-

class říká, co továrna vrací. Pokud je to jakkoliv detekovatelné, nemusí se uvádět. class: App\Authorizator(...) je tedy špatně.

před 7 lety

pekelnik
Člen | 468
+
0
-

Heh ;) tohle už se řešilo … myslím že konečný konsensus byl super! Určitě přejmenovat.