Refaktorizace konfiguračních souborů – kudy do toho? rubrika: Návrh

6 dond
položil/-a 10.6.2013

Řeším(e) problém s nabobtnalou a nepřehlednou konfigurací (XML, cca desítka souborů, multiplatformní desktopová aplikace, Java, část slouží jako prohlížečka / editor dat, část řídí procesy přes vzdálená volání). Jsme nuceni konfiguraci zamrazit (tj. další změny budou muset být zpětně kompatibilní) a dostali jsme čas na její „refaktorizaci“.

Aktuální konfigurace obsahuje předpisy pro vzhled, jakous-takous internacionalizaci, definici příkazů (např. co se kde volá po kliknutí na tlačítko), informace pro připojení na servery, uživatelské informace (zárodky přístupových práv, role) a popis chování prostředí (např. klávesové zkratky, viditelnosti prvků apod.). Jde řádově o tisíce řádek v XML (≤10k).

Cílem je konfigurační soubory zjednodušit, zpřehlednit, použít nějaký referenční mechanizmus (tj. zabránit opakování stejných konstrukcí na více místech).

Nevíme, kudy do toho: všechno souvisí se vším a vytvořit nějaký cílový model „vzorové“ konfigurace se nám dosud nepodařilo, vždycky se zasekneme na nějaké části s otázkou typu „bude možné tohle použít i XYZ?“, na kterou obvykle nedokážeme rozumně odpovědět, protože XYZ jsme zatím neřešili.

Máte někdo s něčím podobným nějakou zkušenost?

odkaz
Anonym
odpověděl/-a 10.6.2013
 
upravil/-a 10.6.2013

Začal bych rozdělením konfiguračních informací do balíků podle určení. Dále si stanovil typy konfiguračních dat. Některá mohou být slovníková (typicky překlady), některá popisující chování (business rules), čistě konfigurační (SERV_XYZ_IP = 1.2.3.4) atd. Pro jednotlivé balíky a typy dat pak způsob ukládání.

Dále to pak závisí na architektuře. Může to být bez připojení k síti nebo ne? Jsou to údaje, jichž aktualizace je nutná okamžitě nebo ji lze odložit na nějakou synchronizaci?

Příklad - změním oprávnění k nějakému zdroji - to je okamžitá změna nutná pro přístup z jakéhokoliv klienta, DB/LDAP ideální kandidát.
Příklad - změním label/barvu tlačítka - XML je můj kamarád a synchro pomoci nějakého aktualizačního threadu/při spuštění klienta.
Příklad - vlastní uživatelská nastavení - tady záleží na možnostech aplikace, jestli má cestovní profily nebo ne. Pokud ano, DB/LDAP. Pokud ne XML nebo INI.
Příklad - kurzovní listek - načtu při startu aplikace, držím v memory cache, threadem kontroluji zda nedošlo ke změně stavu, dle potřeb aktualizuji, aktuální držím někde na serveru v centrální DB.

Mezi těmito zdroji pak bridge, které udrží vazby.

Dále pak důsledně v programovém kódu dodržovat naplnění defualtními hodnotami, aby pokud budou nastaveny všechny kritické hodnoty - URL/IP/users apod. aplikace byla schopna fungovat i bez např. překladu, barevné palety apod.

Je to na dlouhé rozepisování:)

Komentáře

  • dond : Takhle nějak to před lety začalo. V XML je vše z dobrého důvodu (zastaralá architektura serveru, kterou prakticky není možné změnit), schéma v zásadě odpovídá popisovanému; jen je zatím X let překotného vývoje a dosud žádný redesign. 11.6.2013
  • Anonym : No jak tak čtu i ty Vaše další komentáře, tak vám zbývá asi jenom metoda překrytí ... Při startu aplikace zjistit dostupnou verzi konfigurace a podle toho řídít konfiguraci aplikace. Tj. načtu nejdříve starou konfiguraci a pak se podívám, zda je dostupná její novější varianta a načtu ev. tu ... Jenom je to problém udržet po to přechodné období, kdy se staví nová verze a současně se používá stará. Tohle řešení jsem kdysi použil při modernizaci jedné aplikace s tím, že podle zákazníka mělo jít o poměrně rychlý postup, kdy sliboval že jeho IT to zvládnou během půl roku. Nakonec to trvalo skoro 2 roky, ale to už jsem znechuceně opouštěl firmu, protože se nám změnil management a ten stál za ... Zákazníkovi pak budete muset vysvětlit, že přednost mají nové konfigurační soubory, a že když napíše nastavení po staru i po novu, tak vyhraje zásadně nové. Jinak pokud pouze XML, tak doporučuji si zavést způsob verzování a v aplikaci udělat podle verze konfiguračního XMl rozpad. Aplikace sice bude vláčet balastní kód, třeba 3-4 verze zpětně, ale neměl by být problém pak načítat různé konfigurace a testovat chování při změnách ... Je to sice opruz, ale v jedné nejmenované zdravotní pojiˇšťovně xD se nám to vyplatilo. Jejich IT se seznamovalo s novou verzí, chystalo si nové konfiguráky a zkoušeli si rozdílové chování. 11.6.2013
  • dond : Už nás to taky napadlo – ale při představě, kolik to bude práce, jsme se tomu chtěli vyhnout; možná je to však jediná schůdná cesta. 12.6.2013
  • Anonym : Pokud přijdete na lepší řešení, v případě nespolupracujícího zákazníka, budu jenom rád, když se podělíte xD 12.6.2013

Pro zobrazení všech 5 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.