Pico. Wstęp do kontenerów IoC.

Podobne dokumenty
Spring Framework - wprowadzenie i zagadnienia zaawansowane

Tomasz Dobek.

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control Wiktor Zychla 2013

Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka

Programowanie obiektowe

Kontenery IoC dla Java Guice 3.0

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2016

Program szkolenia: REST i Microservices w PHP

Zaawansowane Aplikacje Internetowe

Podstawy frameworka Spring

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

1 Wprowadzenie do J2EE

Programowanie komponentowe

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Kontener Inversion Of Control dla obiektów Ruby realizujący wzorzec projektowy Dependency Injection

mgr inż. Michał Paluch

SPRING FRAMEWORK. dr inż. Jakub Chłapioski

Plik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Projektowanie, tworzenie aplikacji mobilnych na platformie Android

MVVM Light Toolkit. Julita Borkowska

Programowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

Tworzenie komponentów logiki biznesowej i warstwy dostępu do danych w oparciu o EJB3.0/JPA lub EJB 3.1/JPA2

Tworzenie i wykorzystanie usług sieciowych

Przykładowa implementacja

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

JUnit TESTY JEDNOSTKOWE. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Java JMX. Marcin Werla. Monitorowanie i zarządzanie usługami sieciowymi w Javie. mwerla@man.poznan.pl PCSS/Poznań JUG

Projektowanie i architektura frameworka w języku PHP. Tomasz P.F. Kowalczyk

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

Wzorce projektowe. dr inż. Marcin Pietroo

Projektowanie Aplikacji Internetowych Jarosław Kuchta. Wzorce projektowe warstwy biznesowej

NAJLEPSZE STRATEGIE SKUTECZNYCH PROGRAMISTÓW. TECHNIKI PRACY Z KODEM KOD: NSKOD

Programowanie obiektowe

Tytuł szkolenia: Angular 4 - budowanie nowoczesnych i wydajnych aplikacji przeglądarkowych

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

SOA Web Services in Java

Programowanie komponentowe 5

Szczególne problemy projektowania aplikacji internetowych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Szkolenie wycofane z oferty

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

JAX-RS czyli REST w Javie. Adam Kędziora

EJB 3.0 (Enterprise JavaBeans 3.0)

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2017

Zaawansowane Aplikacje Internetowe

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control/Dependency Injection Wiktor Zychla 2014

Decorator (dekorator)

Programowanie Zespołowe

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

System kadrowo-płacowy KOMAX 2.0

Kurs WWW. Paweł Rajba.

Abstract Factory (fabryka abstrakcyjna)

xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

Wzorce projektowe. dr inż. Marcin Pietroo

Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger:

Automatyzacja procesów biznesowych Andrzej Sobecki. ESB Enterprise service bus

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

1. Wymagania prawne. Europejskie uwarunkowania prawne:

Programowanie w Ruby

Komponenty sterowane komunikatami

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Programowanie zdarzeniowe

EJB 2.x oraz zmiany w standardzie dla EJB 3.0. Michał Stanek

Podstawowe informacje o technologii Java EE 7

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych

Wstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania.

Tester oprogramowania 2014/15 Tematy prac dyplomowych

Java Server Faces narzędzie do implementacji w wy prezentacji

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

JBoss Seam: framework nowej generacji. Copyright Piotr Kochański & Erudis,

Aplikacja serwerowa Platformy Prezentacyjnej Opis produktu

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Wskazówki projektowe. Programowanie Obiektowe Mateusz Cicheński

WYBRANE SPOSOBY ZAPEWNIENIA

problem w określonym kontekście siły istotę jego rozwiązania

Spring Framework. Profesjonalne tworzenie oprogramowania w Javie

Nowy powiew od Słońca: EJB 3.0. Copyright Piotr Kochański & Erudis,

Klasy abstrakcyjne i interfejsy

Wzorce projektowe warstwy danych

Internetowy system e-crm do obsługi biura podróży. Marek Bytnar, Paweł Kraiński

Java: interfejsy i klasy wewnętrzne

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Metodyki zwinne wytwarzania oprogramowania

Fragmenty są wspierane od Androida 1.6

EJB 3.0 & JBoss Seam. 25 kwietnia 2007 Jacek Gerbszt 1

Wywoływanie metod zdalnych

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

Podejście obiektowe do budowy systemów rozproszonych

Diagram wdrożenia. Rys. 5.1 Diagram wdrożenia.

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Transkrypt:

Pico Wstęp do kontenerów IoC Michal.Malecki@man.poznan.pl

Plan prezentacji Wzorzec Inversion of Control (IoC) Wyszukiwanie zależności (Dependency Injection) PicoContainer Case Study Podsumowanie

Inversion of Control Wzorzec projektowy określający architekturę kontenerów komponentów Komponenty to klasy, zawierające konkretną funkcjonalność Kontener tworzy instancje komponentów, zapewnia im niezbędne usługi, zarządza ich cyklem życia Jakarta Avalon 1998r. Stefano Mazzocchi

Inversion of Control Kontener IoC Komponent Wymagana usługa

Zalety IoC Automatyczne zarządzanie cyklem życia komponentów Automatyczne rozwiązywanie zależności pomiędzy komponentami Bezbolesne testowanie komponentów Powiązanie interfejsów, a nie konkretnych implementacji

Wyszukiwanie zależności Komponenty wymagają usług, oferowanych przez inne komponenty Rodzaje wyszukiwania Dependency lookup Contructor Injection Setter injection

Dependency lookup Jakarta Avalon Każdy komponent musi implementować interfejs, którego metoda jest wykorzystywana do inicjowania Wada komponent może istnieć jedynie wewnątrz danego kontenera

Dependency lookup - przykład class Komponent implements Service { public void service(servicemanager sm) throws ServiceException { dependency = (Depend1) sm.lookup("idzależności"); } }

Contructor Injection Pico Komponenty (klasy) określają swoje zależności za pomocą parametrów konstruktora Komponenty spełniają wzorzec Dobrego Obywatela (są w stanie spójnym w momencie utworzenia) Uniemożliwiają wykorzystanie cyklicznych zależności Utrudniony auto-wire w porównaniu do setter injection

Contructor Injection - przykład class Komponent { public Komponent(Depend1 d){ dependency =d; } }

Setter injection Spring Zależności są określone przez metody setter, zgodne z JavaBean Pozwala na cykliczność zależności

Setter injection - przykład class Komponent { public Komponent(){ //bezparametrowy konstruktor JavaBean } public void setdependency(depend1 d){ dependency = d; } }

Pico I was expecting a paradigm shift and all I got was a lousy constructor!

Pico Czysty kontener IoC (<50kB jar) Brak wbudowanych usług rozwinięciem jest Nano, integrujący się m.in. z Hibernate, Struts Konfiguracja za pomocą api Nano - Groovy, Javascript, Beanshell oraz XML

org.picocontainer Interfejsy i wyjątki uniezależnienie się od konkretnej implementacji Picocontainer dostęp do zarejestrowanych komponentów MutablePicoContainer zarządzanie komponentami (rejestrowanie, usuwanie) ComponentAdapter - obsługa pojedynczej instancji komponentu

Rejestrowanie komponentów Każdy komponent jest unikalnie identyfikowany przez identyfikator (obiekt bądź klasę) Komponent swoim identyfikatorem pico.registercomponentimplementation(resource.class); Komponent & identyfikator pico.registercomponentimplementation("udp", UDPCom.class); Komponent&identyfikator&lista parametrów pico.registercomponentimplementation("messenger", Messenger.class, new Parameter[] { new ComponentParameter("UDP"), new ConstantParameter("bar") });

Rejestrowanie komponentów Adapter precyzyjnie określamy sposób tworzenia i obsługi komponentów pico.registercomponent( new SetterInjectionComponentAdapter( id", ThreadWorker.class, new Parameter[] { new ComponentParameter("Manager") })); Obiekt gdy pico nie zarządza danym komponentem pico.registercomponentinstance(notmanagablecomponent);

Usługi Pico Najważniejszym elementem Pico, umożliwiającym rozszerzenia są Adaptery Nowe implementacje interfejsów PicoContainer i MutablePicoContainer Niestety znacznie uboższe w porównaniu do Spring

Case study Kontener danych (element Systemu Zarządzania Danymi) cztery rodzaje, wiele konfiguracji Elementy: Komunikacja sieciowa SOAP Obsługa nośników trwałych XML, Berkeley Kontrola zajętości File.renameTo, fuser Zadania cykliczne (wątki)

Case study podejście 1 Jedna klasa główna + 2 wątki Absolutnie nietestowalne Nieczytelne Możliwość dodania nowego rodzaju kontenera przez CnP

Case study podejście 2 Rozbicie funkcjonalności na zbiór klas (komponenty bez kontenera) Znaczne poprawienie parametrów, rozszerzalności Wybór implementacji poszczególnych komponentów jest rozproszony po całej aplikacji Nadal problemy z testami jednostkowymi

Case study podejście 3 Wdrożenie Pico w klasie głównej Konkretne komponenty są wybierane na podstawie konfiguracji w jednym miejscu (podczas rejestracji komponentów) Każdy komponent może być testowany automatycznie

Podsumowanie Malutki kontener znacznie poprawiający jakość budowanych aplikacji Porty C#, PHP, Ruby Brak standardowych usług, oferowanych przez Spring

Odnośniki http://picocontainer.org/ http://www.springframework.org/ http://jdn.pl

Podsumowanie Pytania??