Dotazník: způsob využívání DI a konfigurace
- David Grudl
- Nette Core | 8227
Potřeboval bych pro další vývoj DI zjistit, jak vlastně DI a konfigurační soubory používáte. Pokud je vaše odpověď na některou otázku ANO, napište mi to s krátkým komentářem. Odpovědi NE nepište.
Díky!
- používáte jiný formát konfigurace než neon?
- využíváte dědičnost sekcí či služeb operátorem menšítko?
(
service1 < service2
) - využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní) - používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč? - přepisujete někdy v konfiguraci parametry výchozích služeb?
- píšete vlastní compiler extensions?
- využíváte uvnitř kódu extensions expadování
%prommenných%
? - přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
- využíváte tagy?
- Filip Procházka
- Moderator | 4668
používáte místo zápisu Class(arguments) dvouřádkový class: a arguments: a proč?
viz @jasir :)
přepisujete někdy v konfiguraci parametry výchozích služeb?
Občas je hackuju. Spíš ale měním celou implementaci. Třeba.
píšete vlastní compiler extensions?
Na všechno.
využíváte uvnitř kódu extensions expadování
%prommenných%
?
Ne, všechno předávám rovnou do služeb. cesty k souborům
(%tempDir%
, …) nebo test na produkční mód. Ale všechno
většinou předávám rovnou do služeb a nechám compiler, ať to
expandne.
přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
Udělal jsem to asi jen jednou a byl to temporary hack, který jsem pak přepsal.
využíváte tagy?
Editoval Filip Procházka (15. 3. 2013 13:27)
- castamir
- Člen | 629
využíváte dědičnost sekcí či služeb operátorem menšítko? (service1 < service2)
více prostředí, více databází, registrace služeb facade/repository
píšete vlastní compiler extensions?
zatím jsem napsal jen jeden
používáte místo zápisu Class(arguments) dvouřádkový class: a arguments: a proč?
kvůli setup (jinak háže NeonException, Unexpected indentation)
využíváte tagy?
Ano, často
Editoval castamir (14. 3. 2013 0:50)
- Jan Tvrdík
- Nette guru | 2595
využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
Ano, ale výhradně pro sekce. (Ok, přiznávám, že nevím, že to jde použít i pro služby.)
využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní)
Ano, ale spíš výjimečně.
používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
Jak na kterém projektu. Dvouřádkový má tu zásadní výhodu, že
dědící konfigurák může přepsat např. pouze class
a
argumenty zachovat.
- pekelnik
- Člen | 462
- používáte jiný formát konfigurace než neon?
Ne. Neon rulez ;)
- využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
Ne. Sekce nepoužívám vůbec, u service jsem to použil tuším jednou a hned jsem to zase zrušil přišed na to, že lze pouze upravit existující service :)
- využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní)
Ne. Pokud potřebuji továrnu implmentuji ji jako stadardní službu.
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
Ne. Vlastně se snažím používat pouze:
services:
serviceName: Service\Class
ještě více by se mi líbilo pokud by v budoucnu bylo možné zapisovat služby takto:
services:
- Service\Class
- přepisujete někdy v konfiguraci parametry výchozích služeb?
Ano. Typicky session
. A dále přepisuji
parametry vlastních výchozích služeb.
- píšete vlastní compiler extensions?
Ano. Prakticky na cokoliv. Compiler extensions považuji za jednu z největších killer features. Jsou mnohem praktičtější a přenositelnější než konfigurace v neonu a její zpracování v aplikačním kódu.
- využíváte uvnitř kódu extensions expadování
%prommenných%
?
Ano. Tedy doufám, používám expandování proměnných takto:
$this->options = $this->getConfig($this->options, TRUE);
- přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
Ne. Snažím se abych na kontejner nikde „neviděl“ takže to ani není možné.
- využíváte tagy?
Ano. Ale možná bych si vystačil s
getByType()
. Nejsem z hlavy jistý zda tato metoda nalezne
implementace rozhraní v base třídách, či zda vůbec vrací více
service.
- frosty22
- Člen | 373
využíváte sekci factories? (nepočítaje v to nové generované továrničky dle rozhraní)
Ano a v podstatě často – formuláře, procesní třídy, apod., leč nyní bude možné vše překopat přes ony továrničky s rozhraním (již jsem začal lze to :)
přepisujete někdy v konfiguraci parametry výchozích služeb?
Ano, například: nette.application.mapping, session.expiration
píšete vlastní compiler extensions?
Ano, několik jich používám (cca 5 na projekt :).
- Majkl578
- Moderator | 1364
- využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
Ano, production/development < common, ale spíš z historických důvodů. Chápu potřebu rozlišit nějaké parametry konfigurace dle druhu prostředí jednoduše, přímo v configu.
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
Ano, protože je to asi jediná cesta jak zapsat definici včetně
setup
u.
- přepisujete někdy v konfiguraci parametry výchozích služeb?
Ano, zejména kvůli podstrčení vlastní třídy a/nebo přidání
setup
.
Aktuálně podstrčení vlastní třídy zahodí parametry konstruktoru
definované dříve (bug?).
- píšete vlastní compiler extensions?
Ano, dnes je považuji za de-facto standard pro psaní doplňků/rozšíření.
- přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
Ano, ale pouze výjimečně, např. robot loader.
- využíváte tagy?
Ano, podobně jako uvedl Hosiplan (na rozlišení služeb dle druhu a jejich následné skupinové použití).
- Honza Marek
- Člen | 1664
David Grudl napsal(a):
Potřeboval bych pro další vývoj DI zjistit, jak vlastně DI a konfigurační soubory používáte. Pokud je vaše odpověď na některou otázku ANO, napište mi to s krátkým komentářem. Odpovědi NE nepište. Díky!
- používáte jiný formát konfigurace než neon?
ne
- využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
nepoužívám sekce, dědičnost služeb v nette neznám (ale dává smysl u presenterů)
- využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní)
ne, factories považuju za normální služby
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
výjimečně, pokud je hodně argumentů
- přepisujete někdy v konfiguraci parametry výchozích služeb?
ano, třeba nastavení db
- píšete vlastní compiler extensions?
ano – https://github.com/…xtension.php
- využíváte uvnitř kódu extensions expadování
%prommenných%
?
ano, hodí se, aby se v konfiguraci extension dalo použít třeba %wwwDir%. (ale myslim, že to dělá nette samo, takže to asi neni „uvnitř kódu“)
- přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
ne, je to nesmysl
- využíváte tagy?
v nette jsem je asi zatím nepoužil, ale existují okamžiky, kdy se hodí. například šablonové helpery by se daly označit tagem a šablonová container extension by si je vytáhla a zaregistrovala do latte.
- Panda
- Člen | 569
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
Ano, podobně jako ostatní – když je složitější řádka argumentů. Často je pak zapisuji rovnou takto:
arguments:
- arg1
- arg2
- arg3
Jednou nebo dvakrát jsem to použil při slučování konfigurací (mám
modulární systém, kde každý modul může mít několik konfiguračních
souborů – typicky jeden obecný v systému a pak druhý pro konkrétní
aplikaci), abych mohl přepsat jen class
. Není to ale nic
zásadního.
- přepisujete někdy v konfiguraci parametry výchozích služeb?
Pokud se parametry myslí arguments
, tak ne, pokud se myslí
obecně definice služby, tak ano – nejčastěji pomocí
addSetup
registruji makra do nette.latte
.
- píšete vlastní compiler extensions?
Ano, docela dost – skoro pro každou součást své základní knihovny
mám compiler extension (DoctrineExtension
,
SearchExtension
, WebServiceExtension
, …).
Také každý modul v aplikaci mám zavedený jako compiler extension,
získá tím vlastní konfigurační sekci a možnost definovat služby
programově. Programově typicky zavádím konfiguraci databázových migrací
pro daný modul – pokud modul implementuje značkovací rozhraní
IDatabaseModule
, vytvoří si konfiguraci migrací a zaregistruje
jí do služby, která se stará o migrace.
- využíváte uvnitř kódu extensions expadování
%prommenných%
?
Ano. Typicky %domain%
při přidávání rout.
- využíváte tagy?
Jen tag run
, ale přemýšlím nad využitím pro výše
zmíněný případ s konfigurací db migrací.
- Milo
- Nette Core | 1283
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
Pokud je argumentů více, přijde mi to přehlednější.
EDIT: …ale není to potřeba, jak @dg níže uvádí
(neznal jsem)
- využíváte uvnitř kódu extensions expadování
%prommenných%
?
Použil jsem %tempDir%
jako výchozí hodnotu.
Editoval Milo (14. 3. 2013 14:04)
- David Grudl
- Nette Core | 8227
Jen poznámka, funguje i tato varianta (odrážky, rozdělení na více řádků):
services:
- Authenticator
- MyService(
arg1
arg2
)
- Vojtěch Dobeš
- Gold Partner | 1316
používáte jiný formát konfigurace než neon?
Nikoliv. Ale myslím, že je dobré umožnit minimálně *.php
,
protože pro začátečníky by to mohlo být srozumitelnější (takhle je
třeba se zároveň učit Neon i konfiguraci)..
využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
Nikoliv.
využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní)
Nikoliv.
používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
Někdy to a někdy to, pokaždé záleží na vizuálním dojmu, aby se mi to četlo co nejsnáze.
píšete vlastní compiler extensions?
Ano. Na vše, rád, s oblibou. Je to pecka.
využíváte uvnitř kódu extensions expadování
%prommenných%
?
Ano.
přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
Nikdy. A když to někde najdu, obvykle to jde přepsat.
využíváte tagy?
Ano: run
a kdyby.subscriber
.
Editoval vojtech.dobes (14. 3. 2013 13:27)
- Patrik Votoček
- Člen | 2221
David Grudl napsal(a):
- používáte jiný formát konfigurace než neon?
Na PaaS hostinzích se dá hodně hodnot předávat pomocí
environment proměnných ($_ENV['db_dns']
) etc. Takže v této
situaci používám PHP soubory (ale pouze na přetavení těchto hodnot do
parameters v běžném configu).
- přepisujete někdy v konfiguraci parametry výchozích služeb?
Ano často zároveň se změnou implementace těchto výchozích služeb.
- píšete vlastní compiler extensions?
Ano mám jich spousty (mám kompletně celou aplikaci postavenou nad compiler extensions).
- využíváte uvnitř kódu extensions expadování
%prommenných%
?
Ano nejčastěji kvůli přetavení „relativní“ cesty k souboru v absolutní.
- využíváte tagy?
Ano jak už jsem psal mám celou aplikaci postavenou nad compiler extensions které se mně zároveň starají o registraci některých částí na základě tagů.
- cabadaj
- Člen | 8
- využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
ANO
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
ANO
services:
social:
class: SocialModule\Model\SocialProvider
setup:
- addProvider('twitter', @socialTwitter)
- addProvider('facebook', @socialFacebook)
- přepisujete někdy v konfiguraci parametry výchozích služeb?
ANO
- píšete vlastní compiler extensions?
ANO
- využíváte uvnitř kódu extensions expadování
%prommenných%
?
ANO
- ViPEr*CZ*
- Člen | 817
David Grudl napsal(a):
- používáte jiný formát konfigurace než neon?
ne
- využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
ano
- využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní)
moc ne
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
dvouřádkově, ale proč to nemít oboje… ať si každý vybere
- přepisujete někdy v konfiguraci parametry výchozích služeb?
ano
- píšete vlastní compiler extensions?
ne, zatím jsem si vystačil
- využíváte uvnitř kódu extensions expadování
%prommenných%
?
ano
- přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
ne
- využíváte tagy?
ne
- bazo
- Člen | 620
- využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
ano
- využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní)
ano
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
ano. arguments nie, ale ked chcem pridat tagy alebo setup metody
- přepisujete někdy v konfiguraci parametry výchozích služeb?
ano
- píšete vlastní compiler extensions?
ano
- využíváte uvnitř kódu extensions expadování
%prommenných%
?
ano
- přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
ano
- využíváte tagy?
ano, velmi
- David Matějka
- Moderator | 6445
využíváte dědičnost sekcí či služeb operátorem menšítko? (service1 < service2)
ano
využíváte sekci factories? (nepočítaje v to nové generované továrničky dle rozhraní)
ve starsich projektech
používáte místo zápisu Class(arguments) dvouřádkový class: a arguments: a proč?
ano, kdyz mi to v tu chvili prijde prehlednejsi :)
přepisujete někdy v konfiguraci parametry výchozích služeb?
ano
píšete vlastní compiler extensions?
ano
využíváte tagy?
ano
- Nox
- Člen | 378
využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
zatím ne, ale do budoucna možná
využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní)
ano
přepisujete někdy v konfiguraci parametry výchozích služeb?
stalo se
píšete vlastní compiler extensions?
zatím ne, ale rád bych zkusil
Editoval Nox (15. 3. 2013 14:21)
- Felix
- Nette Core | 1245
- využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
Pouzil jsem to jen parkrat, spise ne
- využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní)
Pouzivam ji zhruba na stejno se services (nekdy prevazuji services)
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
Vetsinou kvuli setupu, ale zalezi jak to vypada
- přepisujete někdy v konfiguraci parametry výchozích služeb?
Hodne malo, udelal jsem zhruba 3–4× asi
- píšete vlastní compiler extensions?
Hojne, uz kvuli ruznym addonum, ktere se zacli psat takto a v neposledni rade mam vetsinou nejaky SystemExtension pro kazdy projekt
- využíváte uvnitř kódu extensions expadování
%prommenných%
?
Vetsinou jen na nastavovani cest k adresarum
- přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
Kvuli bugum nebo pameti jsem neco nekdy musel odstranit (asi robotloader, uz nevim), ale nyni uz prakticky nic
- využíváte tagy?
Zatim moc ne, na vetsim projektu kvuli logovani, ale nejspis do toho zabrednu vic
- stekycz
- Člen | 152
- využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
Ano, u sekcí, ale spíše historicky. O dědičnosti služeb jsem vůbec netušil.
- využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní)
Ano, asi jednou nebo dvakrát :-)
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
Ano, záleží jak kdy. Dost podobně jak psal @vojtech.dobes.
- přepisujete někdy v konfiguraci parametry výchozích služeb?
Ano, především session, cache, mailer.
- píšete vlastní compiler extensions?
Ne, ale chystám se.
- RadekDvorak
- Člen | 11
- využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
O dědičnosti služeb jsem ani nevěděl.
- využíváte sekci
factories
? (nepočítaje v to nové generované továrničky dle rozhraní)
Používám to v implementaci několika továren (např. na komponenty)
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
Je to kompaktnější a přehlednější; závisí asi na délce configu, množství argumentů a osobních preferencích.
- přepisujete někdy v konfiguraci parametry výchozích služeb?
Ano, např. cache, šablony.
- píšete vlastní compiler extensions?
Občas.
- přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
V produkčním kódu zatím ne.
- využíváte tagy?
V zásadě jen pro compiler extensions.
- llook
- Člen | 407
- používáte jiný formát konfigurace než neon?
Formát PHP jsem použil jednou. Bylo to v danou chvíli jednodušší, než
tahat z BFU informaci, jestli se můžu spolehnout na podporu
.htaccess
na hostingu.
- využíváte dědičnost sekcí či služeb operátorem menšítko? (
service1 < service2
)
Dědičnost sekcí vůbec. U jednoho projektu mám i v bootstrapu napevno stanovené, že se načítá vždy sekce common, abych konfigy nemusel zakončovat prázdnými poděděnými sekcemi.
Dědičnost služeb mi připadá jako užitečný koncept, ale zatím jsem ji nevyužil.
- používáte místo zápisu
Class(arguments)
dvouřádkovýclass:
aarguments:
a proč?
Jo, přijde mi většinou přehlednější.
- přidáváte/odstraňujete do/z DI kontaineru nové objekty za běhu?
Někdy v testech.