Hlavní menu

Nástroje

WebKiv / VyhodySpringu

View (print) - Edit page | Recent changes - Page history

Updated 26 May 2010, 21:02 by Peter Cipov

WebKiv.VyhodySpringu History

Hide minor edits - Show changes to markup

26 May 2010, 21:02 by Peter Cipov -
Changed line 21 from:

Snahou je aby kód bol testovateľný mimo bežiaci OpenCms server. Zavedením Spring frameworku je možné dosiahnuť tento cieľ, pri použití základných pravidiel a osvedčených postupov frameworku.

to:

Snahou je aby kód bol testovateľný mimo bežiaci OpenCms server. Zavedením Spring frameworku je možné dosiahnuť tento cieľ, pri použití základných pravidiel a osvedčených postupov frameworku. KAo? si vyrobyť testovacie prostredie je možné násť tu TestovanieCezSpring

26 May 2010, 20:43 by Peter Cipov -
Changed lines 9-10 from:
to:

Obrázok 1

Changed lines 17-18 from:
to:

http://wiki.kiv.zcu.cz/uploads/WebKiv/testSpring.png Obrázok 2

26 May 2010, 20:40 by Peter Cipov -
Changed lines 8-9 from:
to:

http://wiki.kiv.zcu.cz/uploads/WebKiv/Dependencyinjection.png

26 May 2010, 20:34 by Peter Cipov -
Added lines 8-9:
26 May 2010, 20:29 by Peter Cipov -
Changed lines 14-15 from:
to:
26 May 2010, 20:28 by Peter Cipov -
26 May 2010, 20:20 by Peter Cipov - Ukážka tvirby testov cez Spring
Added lines 1-16:

Princípy Spring kontextu

Kontext je základná súčasť Spring-u, ktorá poskytuje prostriedky na realizáciu architektúry Inverzie kontroly (ďalej už len IoC? z anglického inversion of control, viac na stránkach Martina Fowlera). Veľká výhoda tejto architektúry je dekomponovanie zložitých súčastí kódu. Tým získame aj väčšiu prehľadnosť a zmeny v návrhu sa ľahšie zapracúvajú. Dekomponovanosť pomáha aj k lepšej testovateľnosti, pretože komponenty je možné ľahšie nahradiť.

Dependency Injection

Je to jeden zo základných návrhových vzorov IoC?. V podstate to znamená prenechať vytvorenie, správu, všetkých závislostí jednotlivých komponent (v Spring terminológií je to bean) kontajneru (kontextu Springu). Každá bean iba určí v konfigurácií ktoré ďalšie bean potrebuje. Sama ich nevytvára. Pri zavedení programu, kontext podľa konfigurácie vytvorí všetky bean-y a nastavil všetky závislosti. Výhodou tohto prístupu je jednoduchosť zmien, pretože zväčšia stačí zmeniť len konfiguráciu. Tým že všetky implementácie bean-ov sú schované za interface, bean-y nie sú závislé na ich implementácií. Zmena jednej bean-y neovplyvní ostatný kód pokiaľ sa dodrží interface. Preto sa pri programovaní v Spring frameworku striktne dodržuje programovanie cez interface.

Na obrázku 1 je zobrazený príklad kde v kontexte sú 3 bean-y A,B,C. Bean-y B a C požadujú A ako závislosť. Nezaujíma ich implementácia, ale chcú len objekt, ktorý bude spĺňať daný interface. Pri inicializácií, nastaví kontajner všetky závislosti. Bean-y B a C teda nevedia akú implementáciu dostanú. Z obrázka taktiež plynie ďalšia vlastnosť. Určenie závislostí je čisto záležitosťou implementácie, do interface sa nepíšu.

Lepšie testovanie

Tým ,že je všetky závislosti sú mimo, umožnuje to veľmi zjednodušiť testovanie. Odpadá totiž problém zo static class (tie sa testujú veľmi ťažko z dôvodu ich „rezidentnosti“ - sú v pamäti počas celého behu programu a nedajú sa pohodlne nahradiť.). Pri použití Spring frameworku je používanie vlastných static objektov a metód nežiadúce. Túto vlastnosť obstaráva kontajner.

Na obrázku 2 máme zobrazenú modelovú situáciu. Máme bean LoginService?, ktorá obstaráva prihlásenie a nové registrácie. Pri registrácií využíva bean-y DataService? z ktorej získava data z databázy a MailService? ktorou posiela email s potvrdením. Pri testovaní stačí zmeniť konfiguráciu pre kontajner a zameniť produkčné implementácie za testovacie. Produkčný kód sme nijako nepotrebovali upraviť. Snahou je aby kód bol testovateľný mimo bežiaci OpenCms server. Zavedením Spring frameworku je možné dosiahnuť tento cieľ, pri použití základných pravidiel a osvedčených postupov frameworku.