Názvy služeb Dependency Injection Containeru
- Filip Procházka
- Moderator | 4668
V současné implementaci je možné jako název služby použít pouze to, co zchroustá PHP v názvu metody, čili písmenka, čísla a podtržítko.
Já a určitě nejenom já, mám nutkavou potřebu všechno kategorizovat. Teď ji ve mě ještě podpořilo Symfony DIC, které jsem pár týdnů používal. Tam je naming convention následující:
Služba se jmenuje http.request_factory
a když se dumpne
container, převede se na obdobu tohoto
createServiceHttp_requestFactory()
. Když container hledá
službuhttp.request_factory
, tak hledá
metodu createServiceHttp_requestFactory()
Takže teď chci podpořit svoji úchylku v Nette a kategorizovat si svoje
služby. Ovšem název služby http_requestFactory
se mi vůbec
nelíbí :(
- Jaký je doporučovaný naming-convention pro chronické škatulkovače, Davide?
- Můžu nějak přispět, aby se daly služby pojmenovávat i s tečkou? Třeba pull requestem?
Editoval HosipLan (20. 12. 2011 15:24)
- David Grudl
- Nette Core | 8227
Chtěl jsem udělat to, že když v konfigu bude:
http:
services:
requestFactory: ...
Vyrobí to službu (buď) http_requestFactory
nebo
httpRequestFactory
(ale asi spíš s podtržítkem). Což je
zkratka pro rozšíření, aby nemusela vše prefixovat. Tudíž i mimo
rozšíření bych použil prefix:
services:
http_requestFactory: ...
# případně httpRequestFactory:
Čemuž bude odpovídat název metody a bude možné psát $container->http_RequestFactory. Lze to IMHO krásně řešit i bez teček.
(Tečka by byla fajn, kdyby se i služba volala skrz $container->http->requestFactory, což byl původní záměr, ale implementačně šíleně náročný, tak na to kašlu.)
- Patrik Votoček
- Člen | 2221
A co trochu „zneužít“ tagy?
services:
cacheStorage:
class: ...
tags: [cache]
templateCacheStorage:
class: ...
tags: [cache]
$container->cache->cacheStorage;
- Honza Marek
- Člen | 1664
David Grudl napsal(a):
Chtěl jsem udělat to, že když v konfigu bude:
http: services: requestFactory: ...
Jak bys poznal sekci, která něco dělá (services, includes, …) od té, která prefixuje? Výčtem? To je hloupé i proto, že by odpadla možnost rozšiřovat konfiguraci o další funkčnost. Tohle je celkem pěkné v Symfony – každou takovou top-level sekci má na starosti některé rozšíření a to pak nějakou jednoduchou konfiguraci přechroustá na něco velkolepého při kompilaci kontejneru.
- David Grudl
- Nette Core | 8227
Honza Marek napsal(a):
Jak bys poznal sekci, která něco dělá
To jsme si nerozuměli, každá sekce něco dělá. Píšu jen o tom, jak by se mohly prefixovat její vnitřní služby.
- Filip Procházka
- Moderator | 4668
Předtím bylo
http:
...
teď je
parameters:
http:
...
Kdyby to bylo jako původní, mohlo by to mít dvě výchozí sekce
parameters
a services
. Takhle jsi to myslel
Davide?
@**Honza Marek**: Už to má i Nette :)
- Patrik Votoček
- Člen | 2221
@HosipLan: myslím že to myslel tak že by existovaly kontainery na služby (předpokládám symulaci subkontejnerů nad hlavním kontejnerem).
- Filip Procházka
- Moderator | 4668
Subcontainery jsou hrozné zlo. Porušují ti „plochou mapu ‚služba/třída => definice‘“ a musíš dohledávat v různém zanoření a vůbec to strašně komplikuje doplňování služeb. Zbytečné.
- Patrik Votoček
- Člen | 2221
Mě to neříkej. Já jsem ten kdo ti to říkal ještě když jsi je používal. :-)
Jen jsem vysvětloval wo co go…
- Filip Procházka
- Moderator | 4668
A taky jsi ten, od koho jsem si ten nápad vypůjčil :)
Ale tak jsi byl o pár týdnů napřed s používáním
i uvědoměním ;)
- David Grudl
- Nette Core | 8227
Tak tak, subkontejnery jsou opruz a porušují DI ;-) Jde stále o jeden kontejner a syntaktickou záležitost.