Wstęp do kontenerów IoC

Slides:



Advertisements
Podobne prezentacje
Klasy abstrakcyjne i interfejsy
Advertisements

Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
PSZ wykład 4 > Integracja aplikacji z bazami danych cz. II
Wzorce.
Generics w .NET 2.0 Łukasz Rzeszot.
Obiektowe metody projektowania systemów Design Patterns STRATEGY.
Sposoby implementacji asocjacji
Projektowanie Aplikacji Komputerowych
Inteligentny System Aktualności
Model – View - Controler
Obiektowe metody projektowania systemów
Obiektowe metody projektowania systemów
C++ wykład 6 ( ) Polimorfizm.
Java – technologie zaawansowane
Zaawansowane technologie Javy Wykład 1 (26 lutego 2013)
Języki programowania obiektowego
Enteprise Java Beans Emil Wcisło.
Wzorce projektowe w J2EE
Język Java Wielowątkowość.
Projektowanie warstwy serwera Programowanie aspektowe.
Spring podstawy.
Inżynieria Oprogramowania
czyli (anty)wzorzec Singleton
czyli (anty)wzorzec Singleton
Michał Twierkowski Politechnika Poznańska
Test Doubles Adam Gabryś , v1.1,
Architektura Systemu MunSOL
Message-Driven Bean.
Kontrola spójności modeli UML za pomocą modelu przestrzennego DOD
Tadeusz Ziębakowski Zachodniopomorski Uniwersytet Technologiczny.
Analiza możliwości tworzenia aplikacji typu RIA na przykładzie portalu ogrodniczego Autor: Łukasz Strzelecki Promotor: dr inż. Paweł Kasprowski.
Komponentowe systemy rozproszone Wprowadzenie. Komponent... jest to podstawowa jednostka oprogramowania z kontraktowo (deklaratywnie) opisanymi interfejsami,
Projektowanie obiektowe
Enterprise Architecture Patterns
Programowanie komponentowe jesień-zima 2013
Programowanie komponentowe jesień-zima 2013
Rational Unified Process Implementacja Aleksandra Reiman, gr. I-52.
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
Praktyczne wykorzystanie wzorców projektowych MVC oraz IoC.
Spring Framework, Spring Boot
UML W V ISUAL S TUDIO Mateusz Lamparski. UML D EFINICJA Unified Modeling Language (UML) to graficzny język do obrazowania, specyfikowania, tworzenia i.
Service Oriented Architecture
Programowanie strukturalne i obiektowe C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Diagram klas Kluczowymi elementami są: klasy (class)
K URS JĘZYKA C++ – WYKŁAD 6 ( ) Polimorfizm.
Michał Sipek Piotr Kapciak
Komponentowe systemy rozproszone Wprowadzenie. Komponent... jest to podstawowa jednostka oprogramowania z kontraktowo (deklaratywnie) opisanymi interfejsami,
Hibernate Podstawy.
Zakres Wzorce projektowe ( -Adapter (str , wykład wzorce projektowe.
Obiektowe metody projektowania systemów Adapter. Wstęp: „Dostosowanie interfejsu klasy do interfejsu, którego oczekuje użytkownik. Adapter umożliwia współprace.
Obiektowe metody projektowania systemów Abstract Factory design pattern (aka. Kit)
Odwzorowania relacyjno-obiektowe Hibernate Podstawy.
Paweł Starzyk Obiektowe metody projektowania systemów
7/1/ Projektowanie Aplikacji Komputerowych Piotr Górczyński Cykl życia systemu.
Obiekty COM Przemysław Buczkowski. Plan prezentacji 1.Wprowadzenie do COM 2.Historia standardu 3.Jak działa COM 4.Interface IUknown 5.Paradygmaty COM.
Wzorce Projektowe w JAVA
Zarządzanie wdrożeniem oprogramowania w organizacji w oparciu o metodykę ITIL Michał Majewski s4440 Praca magisterska napisana pod kierunkiem dr inż. Tomasza.
Architektura Rafał Hryniów. Architektura Wizja projektu systemu, którą dzielą twórcy Struktura komponentów systemu, ich powiązań oraz zasad i reguł określających.
Asocjacja,Kompozycja,Agregacja
Komunikacja pomiędzy luźno powiązanymi komponentami Mateusz Sionkowski.
Dobre praktyki w projektowaniu aplikacji mobilnych Arkadiusz Waśniewski
Analiza, projekt i częściowa implementacja systemu wspomagania pracy Referatu Reprografii Promotor: mgr inż. Dariusz OlczykWykonała: Katarzyna Ściwiarska.
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
(według:
Zaawansowane technologie Javy Wykład 1 (23 lutego 2017)
Programowanie Obiektowe – Wykład 2
AOP – Aspect Oriented Programming
PGO Interfejsy Michail Mokkas.
Konteneryzacja i DevOps
Zapis prezentacji:

Wstęp do kontenerów IoC 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 © Michał Małecki 2004

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 A jak to wyglądało w Struts?? Czy kontener servletów nie jest IoC?? © Michał Małecki 2004

Inversion of Control Kontener IoC Komponent Wymagana usługa Komponenty znajdują się w środowisku kontenera, który tworzy je i udostępnia niezbędne usługi, które z kolei są zapewniane przez inne komponenty. Zależności nie powinny być cykliczne (więcej o tym, później) Wymagana usługa © Michał Małecki 2004

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 © Michał Małecki 2004

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

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 Pull approach (registry concept) Examples : EJB that leverages JNDI Servlets that leverage JNDI - Contextualized Dependency Lookup (former type 1) AKA Push approach Examples : Servlets that leverage ServletContext Avalon JContainer's DNA OSGi (to be confirmed) Keel (uses Avalon) © Michał Małecki 2004

Dependency lookup - przykład class Komponent implements Service { public void service(ServiceManager sm) throws ServiceException { dependency = (Depend1) sm.lookup("idZależności"); } } © Michał Małecki 2004

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 Jako przykłady podaję kontenery najsilniej związane z danym typem; zarówno pico obsługuje setter, jak i spring construction Auto-wire – automatyczne wyszukanie zależności, na podstawie typów bądź nazw komponentów; constructor pozwala wykorzystywać tylko typy, bo refleksja nie pozwala na odczytanie nazw parametrów © Michał Małecki 2004

Contructor Injection - przykład class Komponent { public Komponent(Depend1 d){ dependency =d; } } © Michał Małecki 2004

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

Setter injection - przykład class Komponent { public Komponent(){ //bezparametrowy konstruktor JavaBean } public void setDependency(Depend1 d){ dependency = d; } © Michał Małecki 2004

Pico I was expecting a paradigm shift and all I got was a lousy constructor! © Michał Małecki 2004

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 © Michał Małecki 2004

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 © Michał Małecki 2004

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") }); © Michał Małecki 2004

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); © Michał Małecki 2004

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 © Michał Małecki 2004

Case study Kontener danych (moduł Systemu Zarządzania Danymi): cztery rodzaje, różniące się sposobem przechowywania (pliki, taśmy, bd) wiele konfiguracji Aplikacja opracowana w Poznańskim Centrum Superkomputerowo-Sieciowym Cześć projektu PROGRESS -http://progress.psnc.pl © Michał Małecki 2004

Case study - elementy Elementy: Komunikacja sieciowa SOAP Obsługa nośników trwałych XML, Berkeley Kontrola zajętości File.renameTo, fuser Zadania cykliczne (wątki) © Michał Małecki 2004

Case study – podejście 1 Jedna klasa główna + 2 wątki Absolutnie nietestowalne Nieczytelne Możliwość dodania nowego rodzaju kontenera przez CnP CnP – copy’n’Paste © Michał Małecki 2004

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 © Michał Małecki 2004

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 © Michał Małecki 2004

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

Odnośniki http://picocontainer.org/ http://www.springframework.org/ http://jdn.pl © Michał Małecki 2004

Podsumowanie Pytania?? © Michał Małecki 2004