Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Podobné prezentace


Prezentace na téma: "Dfdfdf."— Transkript prezentace:

1 dfdfdf

2 Dependency Injection frameworky v Jave
Dagi, Čeven, 2009

3 Agenda 1. Intro 2. Inversion of control
3. Co by měl DI framework zvládnout 4. Srovnání vybraných DI frameworků 5. Q&A 20 September September 2019

4 Intro

5 9/20/2019 For internal use only -- not for distribution

6 Martin Fowler Refactoring Continuous integration Inversion of Control
9/20/2019 For internal use only -- not for distribution

7 Timeline 20 September September 2019

8 Inversion of Control

9 Programy před zavedením IoC
9/20/2019 For internal use only -- not for distribution

10 Programy po zavedení IoC
20 September September 2019

11 Komponenty a jejich vazby
20 September September 2019

12 public class ReservationService { private BookService bookService;
public ReservationService() { init(); } private void init () { LocalBookStore localBookStore = new LocalBookStore(); localBookStore.setPath("/home/johndoe/data.xml"); setBookService(localBookStore); public boolean reserveBook(long bookId, Date from,Date to,User u) { Book book = bookService.getBook(bookId); //kod vlastní rezervace vynechan public void setBookService(BookService bookService) { this.bookService=bookService; 20 September September 2019

13 Know Your Enemy private void init () {
LocalBookStore localBookStore = new LocalBookStore(); localBookStore.setPath("/home/johndoe/data.xml"); setBookService(localBookStore); } 20 September September 2019

14 Generalizace problému
Kde najít Jak získat Jak zkonfigurovat Jak spojit dohromady 20 September September 2019

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 (loosely coupled) 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 20 September September 2019

16 Service locator 20 September September 2019

17 Dependency Injection 20 September September 2019

18 Service locator vs. DI Preferujte DI Service locator Žádné těsné vazby
Transparentní No singleton hell Service locator body napojení Servlet Controller aplikace 20 September September 2019

19 Co by měl DI framework zvládnout

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
Constructor injection Bezpečnější, Přehlednější Nepovinné závislosti, Cyklické závislosti (proxy) Setter injection Nepovinné či velké množství závislostí Chybějící závislosti Field injection Jednoduchý zápis Netransparentní Proč Pro různé případy se hodí různé přístupy 20 September September 2019

22 Metadata pro popis komponent
Anotace Jednoduchý zápis Zapečené na úrovni kódu XML Ukecané Lze měnít v deployment time Konfigurovatelné komponenty (vazba na infrastrukturu) Proč Obvykle oba typy komponent v aplikace 20 September September 2019

23 Jak najít obrázky pro prezentaci
20 September September 2019

24 20 September September 2019

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í (mock objecty se stejným rozhraním) 20 September September 2019

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 20 September September 2019

27 Řízené pořadí vzniku Proč Nepřímé závislosti
Zajištění explicitního pořadí inicializace 20 September September 2019

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 20 September September 2019

29 Další Programový přístup ke komponentám Jednoduchá testovatelnost Proč
Vstupní bod aplikace Kód, který si není vědom obrácené kontroly Legacy, Integrace s 3party knihovnami Jednoduchá testovatelnost Efektivita vývoje Facebook, Twitter, Freevideo… 20 September September 2019

30 Srovnání vybraných DI frameworků

31 Dependency injection frameworky
Embedded frameworky PicoContainer 2.8 Google Guice 2.0 Aplikační frameworky JBoss Microcontainer GA Spring framework 2.5.x Standard Apache OpenEJB 3.0 20 September September 2019

32 20 September September 2019

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 20 September September 2019

34 20 September September 2019

35 Questions?

36


Stáhnout ppt "Dfdfdf."

Podobné prezentace


Reklamy Google