Dotazník: způsob využívání DI a konfigurace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8108
+
0
-

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: a arguments: 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?
hrach
Člen | 1834
+
0
-

využíváte dědičnost sekcí či služeb operátorem menšítko? (service1 < service2)

Ano. Pro konfiguraci prostředi. beta < production, test < production.

píšete vlastní compiler extensions?

Ano. Obecne pro vlastni doplnky. Otazka je, jestli to nejde resit lip / jinak.

Filip Procházka
Moderator | 4668
+
0
-

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?

Používám vydatně

Editoval Filip Procházka (15. 3. 2013 13:27)

jasir
Člen | 746
+
0
-
  • používáte místo zápisu Class(arguments) dvouřádkový class: a arguments: a proč?

Když se mi kratší zápis nevejde do 80 znaků :-)

  • využíváte tagy?

Ano.

Editoval jasir (14. 3. 2013 0:25)

enumag
Člen | 2118
+
0
-

přepisujete někdy v konfiguraci parametry výchozích služeb?

Ano. Většinou v některém vlastním compiler extension, občas i v neonu.

píšete vlastní compiler extensions?

Každou chvíli.

castamir
Člen | 629
+
0
-

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

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: a arguments: 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
+
0
-
  • 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: a arguments: 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
+
0
-

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
+
0
-
  • 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: a arguments: a proč?

Ano, protože je to asi jediná cesta jak zapsat definici včetně setupu.

  • 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í).

pekelnik
Člen | 462
+
0
-

…je to asi jediná cesta jak zapsat definici včetně setupu.

podle mě lze definici včetně setupu zapsat i za použití jednořádkového Class(args):

services:
	foo:
		class: Foo(args)
		setup:
			- setBar(args)

nebo mi něco ušlo?

Honza Marek
Člen | 1664
+
0
-

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: a arguments: 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
+
0
-
  • používáte místo zápisu Class(arguments) dvouřádkový class: a arguments: 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
+
0
-
  • používáte místo zápisu Class(arguments) dvouřádkový class: a arguments: 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 | 8108
+
0
-

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

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: a arguments: 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)

redhead
Člen | 1313
+
0
-

Až na compiler extension na vše říkám ne.

Patrik Votoček
Člen | 2221
+
0
-

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
+
0
-
  • 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: a arguments: 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 | 811
+
0
-

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: a arguments: 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
+
0
-
  • 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: a arguments: 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
+
0
-

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

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 | 1186
+
0
-
  • 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: a arguments: 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
+
0
-
  • 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: a arguments: 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
+
0
-
  • 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: a arguments: 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
+
0
-
  • 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: a arguments: 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.