15. 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
18. Servicelocator vs. DI Preferujte DI Žádné těsné vazby Transparentní No singletonhell Servicelocator body napojení Servlet Controller aplikace 18 24 June 2009
20. 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
21. 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
22. 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
25. 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
26. Ří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
27. Řízené pořadí vzniku Proč Nepřímé závislosti Zajištění explicitního pořadí inicializace 27 24 June 2009
28. Ž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
29. 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
33. 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