Konfigurace modulů – jak nejlépe na to

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jiří Nápravník
Člen | 710
+
0
-

Mám aplikaci rozdělenou na několik modulu, PhotoModule, ArticleModule apod. A chci mít možnost konfigurace například, cesta kam se budou nahrávat fotky, velikosti na které je budu ořezávat apod. No a teď jak nejlépe tohle řešit? Napadlo mě nekolik způsobů:

  1. Tohle jsem měl nejdříve nandal jsem to config.neon pod slozku parameters a konkrétní parametry jsem si přes neon posílal, do služeb, komponent, příp. presenteru. Ale postupně se mi to přestalo líbit, protože jsem těhle parametrů měl více a neon bobtnal díky tomu, že jsem předával tyhle závislosti na hodně místech.
  2. To mám teď, stále parametrs, nicméně udělal jsem si obálku nad parametri pro každý modul, nemusím tak řešit předávání, a řeší to za mě autowiring.
  3. Dnes mě ale napadlo, zda by na tohle nešli nějak rozumně využít CompilerExtensions, je to v podstatě to samé, co se dělá u ruzných konfigurací extensions. Nějaké defaultní hodnoty, mohu je překrýt. Ale nevím jak bych pak tyhle závislosti přeával do konkrétních komponent, modelových tříd atd. Resp. vím, vytáhnul bych si ContainerBuilder a tam to vše nastavoval. Ale zase pak bych v tom měl celkem nepořádek, některé služby definované v configu, některé v CompilerExtensions.

Jak to tedy nejlépe řešit?

Michalek
Člen | 211
+
0
-

„Bobtnání“ neonu jsem si vyřešil takhle…

config.neon

includes:
	- ../BannerModule/config/config.neon
	- ../TestModule/config/config.neon
	- ../SearchModule/config/config.neon
	- ../HomepageModule/config/config.neon
David Matějka
Moderator | 6445
+
0
-

některé služby definované v configu, některé v CompilerExtensions.

tak je vsechny nadefinuj v compiler extension, ne? :)

Ja to resim pres compiler extension a vyhovuje mi to..

Wrappery okolo parametru vytvarim az ve chvili, kdy je ten parametr potrebny ve vice sluzbach (nebo kdyz je jedna sluzba zavisla na mnoho parametrech).  Vetsinou to ale nejsou nejaky registry se vsemi parametry a s getterama. Ale spis jednoduchy sluzby kolem jednoho, dvou souvisejicich parametru a maji v sobe treba i nejakou jednoduchou logiku.

Editoval matej21 (26. 3. 2014 18:46)

Jiří Nápravník
Člen | 710
+
0
-

JJ, což o to to mám podobně díky Flame\Modules. Ale mě se tam halvně nelíbí to posílání neobjektových dat, do konstruktoru, který pak taky bobtná, když tam těch závislostí je více. Ano řešením je použít setup a nasázet to tam. Ale je přeci jen lepší, když se podívám na konstruktor a tam vidím hned všechny požadované závislosti

Napadlo mě ještě teď, že by šlo ty extensions udělat tak, že bych tam měl ty parametry a extensiona by udělala to, že by vytvořila službu, která by obalovala ty nastavené věci. Byla by to taková ta možnost dvě jak jsem uvedl v úvodním postu, ale nebylo by to pod parametrs v neonu a mohl bych i v extensione kontrolovat i zda je nastavený na správnou hodnotu, například složka je opravdu složka apod.

Jiří Nápravník
Člen | 710
+
0
-

matej21 : no to se mi moc nechce, jsem tvor líný:-) jeden modul má třeba 20 služeb a továrniček a to bych se upsal časem…

no v mym pripade to jsou vetšinou parametry, který nesou většinou jen textovou informaci – adresář, e-mail apod.. Takže by to byla v podstatě obálka nad dvěma třema atributy a to raději udělám registr všech

Tomáš Votruba
Moderator | 1114
+
0
-

@Jiří Nápravník: Osobně to řeším tak, že parametry k parametrům pod podsekci modules.

Všechno najdeš tu

Jiří Nápravník
Člen | 710
+
0
-

@Tomáš to je hodně podobné tomu, jak to mám teď, jen nevyužívám CompilerExtension, ale mám to v konkrétních ServiceWrapperech. Jak řešíš pak samotné předávání, či jak se dostáváš k parametrům?

Tomáš Votruba
Moderator | 1114
+
0
-

@Jiří Nápravník: Viz ParameterService (obálka nad polem parametrů)

Tam, kde potřebuji pracovat s nějakými parametry, si ji injectnu a vytáhnu co je potřeba.

Editoval Tomáš Votruba (27. 3. 2014 8:16)

Jiří Nápravník
Člen | 710
+
0
-

Tak to máme opravdu hodně podobné, já jen nemám jednu parameter service, ale mám vždy pro modul konkrétní, kvůli tomu, že chci mít třeba zkratku a volat jednou metodou například nějaký konkrétní index v poli parameters.