Dfdfdf.

Slides:



Advertisements
Podobné prezentace
Webové služby nad IS/STAG 1 / 21 Seminář IS/STAG Kunžak 2008 Seminář IS/STAG – Kunžak 2008 Webové služby nad IS/STAG Lukáš Valenta.
Advertisements

Úvod do platformy Java EE
AJAX fenomén současného internetu Dalibor Kačmář Academic Developer Evangelist Microsoft ČR host Vítek Karas Senior Software Development Engineer Microsoft.
Ať se postará někdo jiný, najmeme si programátory z Číny. Čuníkům vstup zakázán.
FG Forrest, a.s. Jan Novotný iBatis SqlMaps.
Rozšíření systému pro zátěžové testy o SOAP a agenty Zbyněk Pyšný.
Proxy. Definice  zástupce nebo náhradník za dotyčný objekt  proxy i zastoupený objekt dědí od stejného interfacu  proxy kontroluje přístup k objektu.
Workflow Foundation Základy a architektura
Modelování procesů pomocí workflow
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Metamodelování OpenSoul Metamodeler UML profily v EA Albert Zentner Aquasoft
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Zend Framework 2. Svět se změnil! Zapomeňte! Všechno je jinak!
Vektorový animátor Diplomová práce
T OOL FOR C OLLABORATIVE XML S CHEMA I NTEGRATION Jiří Meluzín.
Čtvrté cvičení Objektové programování Objektový model v Javě
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Dependency injection Jiří Matula Neruším? Ráda bych vám pomohla
3. Životní cyklus a procesy projektu
Úvod. školní: příprava na předmět Databázové systémy praktický: webové aplikace databázové systémy základy vývoje webových aplikací od návrhu databáze.
Objektové programování
Jaroslav Šnajberk, Přemek Brada
Dependency injection Předávání závislostí Petr Kalivoda
6. cvičení Polymorfismus
Evropská směrnice INSPIRE Ing. Pavla Tryhubová Katedra mapování a kartografie ČVUT v Praze, Fakulta stavební.
B. Miniberger, BIVŠ Praha 2009
Transparentní modelování a provádění procesů Michael Juřek Software Architect Microsoft s.r.o.
Dokumentace objektů a zveřejnění funkcí
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 13.
Navrhované předměty pro OI a další zimní semestr.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
uložené procedury (stored procedures) triggery, sekvence, pohledy, funkce, parametrické dotazy (prepared statements) komplexní agregace a SQL dotazy jiné.
Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic 1.
Obhajoba projektu PA165 Půjčovna stavebních strojů Milan Malota, Ferdinand Hudek, Kamil Veselý, Daniel Gašper PA165: Vývoj programových systémů v jazyce.
Nebezpečí webových aplikací Tomáš Strýček Invex Forum Brno
2005 Adobe Systems Incorporated. All Rights Reserved. 1 Adobe Řešení pro veřejnou správu Transformace služeb veřejné správy a PDF Inteligentními Dokumenty.
2005 Adobe Systems Incorporated. All Rights Reserved. 1 Inteligentní PDF formuláře Vladimír Střálka Territory Account Manager Adobe Řešení pro.
Návrh modelu řízení ECM v kontextu řízení informatiky Ing. Renáta Kunstová.
Návrh podle kontraktu - klasická metodika a moderní nástroje Tomáš Pitner Masarykova univerzita v Brně Fakulta informatiky
PA165: Úvod do Java EE Petr Adámek.
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
Web services. Co jsou webservices Součinná spolupráce počítačů v síti Technologie pro vzdálené volání procedur (RPC) Nezávislá na platformě Data v XML.
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
1/11 VRML + VoiceXML Jiří Pokorný Pavel Strnad Aleš Friedl Vving - voicexml vrml integration.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 5.
Web services – když si Java sedne s M$ na kus řeči Ing. Petr Přibyl CCA Group a.s.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Jak psát „Čistý kód“ A hlavně se v něm pak neztratit Jan Pospíšil Senior Technology
Testování aplikací v Javě Petr Adámek IBA CZ, s.r.o. © 2010.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY MVC vs MVP.
Randstad Java Academy vše o kurzu Gabriela Hrbáčková Director Randstad Professionals.
TDD - Test Driven Development
SOLID principy v OOP návrhu
Návrhový vzor Flyweight
Tradiční metodiky vývoje softwaru
Abstract Factory.
Redakční systém s integrací webových služeb
Unit testování v JavaScriptu
Reflexe jako introspekce
Tradiční metody vývoje softwaru
METODOLOGIE PROJEKTOVÁNÍ
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
C# přehled vlastností.
Transkript prezentace:

dfdfdf

Dependency Injection frameworky v Jave Dagi, Čeven, 2009

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

Intro

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

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

Timeline http://www.picocontainer.org/inversion-of-control-history.html 20 September 201920 September 2019

Inversion of Control

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

Programy po zavedení IoC 20 September 201920 September 2019

Komponenty a jejich vazby 20 September 201920 September 2019

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

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

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

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

Service locator 20 September 201920 September 2019

Dependency Injection 20 September 201920 September 2019

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

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 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 (@Required) Field injection Jednoduchý zápis Netransparentní Proč Pro různé případy se hodí různé přístupy 20 September 201920 September 2019

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

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

20 September 201920 September 2019

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

Ří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 201920 September 2019

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

Ž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 201920 September 2019

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

Srovnání vybraných DI frameworků

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

20 September 201920 September 2019

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

20 September 201920 September 2019

Questions?