Generalizace problému Kde najít Jak získat Jak zkonfigurovat Jak spojit dohromady 14 24 June 2009
Obrácená kontrola „…vychází z principu přenesení odpovědnosti za nalezení, konfiguraci a spojení komponent dohromady na někoho třetího“ Indirekce == volné vazby (looselycoupled) Znovupoužitelnost Lepší testovatelnost Extenzibilita Dvě možné implementace Přímé závislosti na prostředníkovi Nepřímé závislosti na prostředníkovi 15 24 June 2009
Servicelocator 16 24 June 2009
DependencyInjection 17 24 June 2009
Servicelocator vs. DI Preferujte DI Žádné těsné vazby Transparentní No singletonhell Servicelocator body napojení Servlet Controller aplikace 18 24 June 2009
Co by měl DI framework zvládnout
Minimální možná míra invaze Invazivnost Jak moc je ještě komponenta POJO Co je invazivní Implementace rozhraní Odvození komponenty od specifické třídy frameworku Nemožnost používat základní programové konstrukty finální třídy konstruktory s parametrem Proč Návrhové a implementační kompromisy
Podpora základních typů realizace DI Constructorinjection Bezpečnější, Přehlednější Nepovinné závislosti, Cyklické závislosti (proxy) Setterinjection Nepovinné či velké množství závislostí Chybějící závislosti (@Required) Fieldinjection Jednoduchý zápis Netransparentní Proč Pro různé případy se hodí různé přístupy 21 24 June 2009
Metadata pro popis komponent Anotace Jednoduchý zápis Zapečené na úrovni kódu XML Ukecané Lze měnít v deploymenttime Konfigurovatelné komponenty (vazba na infrastrukturu) Proč Obvykle oba typy komponent v aplikace 22 24 June 2009
Jak najít obrázky pro prezentaci 23 24 June 2009
24 24 June 2009
Reference mezi komponentami Typem Bezpečnější (Teoreticky) Jedna instance komponenty Sběr podle typu Extenzibilita s volnou vazbou Symbolickým jménem Více instancí stejného rozhraní Variabilnější skládání XML Proč Testování (mockobjecty se stejným rozhraním) 25 24 June 2009
Řízení vzniku komponent Uvnitř kontextu Delegace Factory, Fctory metod Mimo kontext Deserializace komponenty Web či ORM framework Proč Legacy kód, 3rd party knihovny 26 24 June 2009
Řízené pořadí vzniku Proč Nepřímé závislosti Zajištění explicitního pořadí inicializace 27 24 June 2009
Životní cyklus komponent Jedna instance komponenty Singleton Nová instance komponenty Prototyp Konverzační instance komponenty HTTP request, HTTP session atd. Proč Implementační detail komponenty Web aplikace 28 24 June 2009
Další Programový přístup ke komponentám Proč Vstupní bod aplikace Kód, který si není vědom obrácené kontroly Legacy, Integrace s 3party knihovnami Jednoduchá testovatelnost Proč Efektivita vývoje Facebook, Twitter, Freevideo… 29 24 June 2009
Srovnání vybraných DI frameworků
Dependencyinjectionframeworky Embeddedframeworky PicoContainer 2.8 GoogleGuice 2.0 Aplikační frameworky JBossMicrocontainer 2.0.6 GA Springframework 2.5.x Standard ApacheOpenEJB 3.0 31 24 June 2009
32 24 June 2009
Java Contexts and Dependency Injection (JSR-299) WebBeans Myths JSR-299 is just for EJBs JSR-299 is tied to JSF JSR-299 is tied to heavyweight Java EE containers JSR-299 uses a lot of annotations 33 24 June 2009
0 comments
Post a comment