Omówienie wzorców wykorzystywanych w Prism Dominika Różycka, 254130



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

Wzorce projektowe. dr inż. Marcin Pietroo

Programowanie obiektowe

MVVM Light Toolkit. Julita Borkowska

Budowanie aplikacji biznesowych przy użyciu. Presentation Foundation i wzorca MVVM

Wprowadzenie do programowania aplikacji mobilnych

Wzorce projektowe. dr inż. Marcin Pietroo

Wzorce projektowe. dr inż. Marcin Pietroo

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

Projektowanie obiektowe Wzorce projektowe

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

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 2

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

Wzorce architektoniczne

Projektowanie obiektowe Wzorce projektowe. Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów)

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

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

MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop Spis treści

Wypożyczalnia VIDEO. Technologie obiektowe

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Wskazówki projektowe. Programowanie Obiektowe Mateusz Cicheński

Zaawansowane programowanie w C++ (PCP)

Spring Framework - wprowadzenie i zagadnienia zaawansowane

Architektura interfejsu użytkownika

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

Programowanie obiektowe

Programowanie MorphX Ax

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

7. Tworzenie interfejsu użytkownika w WPF użyciem PRISM 5.0

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

Wzorce projektowe Michał Węgorek

Projektowanie Graficznych Interfejsów Użytkownika Robert Szmurło

Analiza i projektowanie aplikacji Java

Program szkolenia: Wzorce projektowe i ich implementacja w C# oraz testowanie automatyczne

12) Wadą modelu kaskadowego jest: Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 13) Wadą modelu opartego na prototypowaniu jest:

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

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

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

Język Java część 2 (przykładowa aplikacja)

Wprowadzenie niektórych zagadnień OOP oraz wzorce operacyjne

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

Kompleksowe tworzenie aplikacji klasy Desktop z wykorzystaniem SWT i

Widoki zagnieżdżone, layout. 1. Wprowadzenie Repozytoria danych

Projektowanie Graficznych Interfejsów Użytkownika. Robert Szmurło

5. Mechanizm szablonów.

Wykład 1 Inżynieria Oprogramowania

Język Java część 2 (przykładowa aplikacja)

Forum Client - Spring in Swing

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

Adaptywny kod : zwinne programowanie, wzorce projektowe i SOLID-ne zasady / Gary McLean Hall. Gliwice, cop Spis treści

Specyfikacja implementacyjna aplikacji serwerowej

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Testowanie oprogramowania Wzorce projektowe

Projekt architektury systemów informatycznych Uniwersytetu Warszawskiego w oparciu o metodykę TOGAF. Tomasz Turski

Wprowadzenie do systemów informacyjnych

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

Komunikacja i wymiana danych

Metody i narzędzia ewaluacji

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod:

Zaawansowane programowanie obiektowe - wykład 5

Programowanie Zespołowe

Zaawansowane Aplikacje Internetowe

Programowanie aplikacji dla Sklepu Windows w języku C#

Design Pattern Density Defined

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

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

Programowanie obiektowe

To sposób w jaki użytkownik wchodzi w interakcje z systemem. Środowisko graficzne używa kombinacji graficznych elementów(przyciski, okna, menu) i

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

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

Szkolenie. IBM Lotus - Podstawy projektowania aplikacji w Domino Designer 8.5. Strona szkolenia Terminy szkolenia Rejestracja na szkolenie Promocje

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

Tworzenie aplikacji Web Alicja Zwiewka. Page 1

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

Grupy pytań na egzamin magisterski na kierunku Informatyka (dla studentów niestacjonarnych studiów II stopnia)

ASP.NET MVC. Grzegorz Caban 20 stycznia 2009

Politechnika Poznańska, Instytut Informatyki, TWO/GE. Programowanie dla ios

Programowanie obiektowe

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Przesłanki powstania książki... xvi Dla kogo przeznaczona jest ta książka?... xvi Co znajdziemy wewnątrz książki?... xvii

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce odpowiedzialności

Programowanie obiektowe

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

Builder (budowniczy) Cel: Przykład:

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

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

Wykład 9: Polimorfizm i klasy wirtualne

Wykład 5. Inżynieria oprogramowania MIS s MIO s MIS n Listopad 2014

Wzorce projektowe cz. I. Wzorce projektowe cz. I 1/33

Platforma Eclipse: Pluginy, RCP oraz GEF

Dokumentacja do API Javy.

Zagadnienia projektowania aplikacji J2EE

Program szkolenia: Wzorce projektowe w C++

Programowanie zorientowane obiektowo. Mateusz Kołecki

Transkrypt:

Omówienie wzorców wykorzystywanych w Prism Dominika Różycka, 254130 Wzorzec projektowy - w inżynierii oprogramowania jest to uniwersalne i sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych. Demonstruje powiązania i zależności pomiędzy klasami oraz obiektami i ułatwia tworzenie, modyfikację oraz pielęgnację kodu źródłowego. Jest opisem rozwiązania, a nie jego implementacją. Wzorce projektowe stosowane są w projektach wykorzystujących programowanie obiektowe. Tworząc aplikacje, zazwyczaj spotykamy się z wzorcami projektowymi lub też sami je stosujemy. W przykładowej implementacji przy użyciu Prism, zalecane są wzorce: Adapter, Application Controller (Kontroler aplikacji), Command (Polecenie), Composite (Kompozyt) i Composite View, Dependency Injection (Wstrzykiwanie zależności), Event Aggregator, Façade (Fasada), Inversion of Control (Odwrócenie sterowania), Observer (Obserwator), Model-View-ViewModel (MVVM) (, Registry (Rejestr), Repository (Repozytorium), Separated Interface, Plug-In, Service Locator (Lokalizator Usługi) Poniższa ilustracja pokazuje przykładową architekturę aplikacji tworzonej przy użyciu biblioteki Prism i niektórych z typowych wzorców. Prostsza aplikacja prawdopodobnie wykorzysta tylko kilka z nich. 1

Rys 1. Przykładowa architektura aplikacji kompozytowej przy użyciu wymienionych wzorców projektowych. Adapter Wzorzec projektowy adapter - jak sama nazwa wskazuje, dopasowuje interfejs jednej klasy do oczekiwanego przez inną klasę. W bibliotece Prism, wzorzec Adapter jest używany do dostosowywania regionów do Windows Presentation Foundation (WPF) ItemsControl, ContentControl i Selector. Aby zobaczyd zastosowany wzorzec Adapter trzeba zobacztd plik ItemsControlRegionAdapter.cs w bibliotece Prism. Wzorzec Kontroler Aplikacji Wzorzec projektowy Kontroler Aplikacji pozwala nam oddzielid zadanie tworzenia i wyświetlania widoków w klasie kontrolera. Ten rodzaj kontrolera jest nieco inny niż kontroler znany z aplikacji MVC. Zadaniem kontrolera aplikacji jest hermetyzacja kontroli prezentacji widoku. Może się zajmowad widokami posiadającymi instancję - czyni to poprzez zamieszczenie ich w odpowiednim pojemniku w interfejsie użytkownika (UI), przełączanie się między widokami, które mają ten sam pojemnik i czasami koordynuje komunikację między widokiem a ViewModelem. Chociaż nazwą wzorca jest Kontroler Aplikacji, kontrolery są często zawężane do podzbioru aplikacji, takie jak kontroler modułu w aplikacji Prism lub kontroler, który obejmuje zestaw pokrewnych widoków. W rezultacie, często będziemy mieli więcej niż jeden kontroler w aplikacji Prism. Dla przykładu implementacji tego wzorca zobacz klasę OrdersController w Stock Trader Reference Implementation (Stock Trader RI). 2

Wzorzec Polecenie Wzorzec Polecenie jest wzorcem projektowym, w którym obiekty są używane do reprezentowania akcji. Obiekt Command hermetyzuje akcję i jej parametry. Pozwala to na oddzielenie wywołującego polecenia i jego obsługi. Biblioteka Prism pozwala na CompositeCommand - umożliwia ono uruchomienie kilku metod na skutek danej akcji (ICommand i DelegateCommand). Aby zobaczyd użycie CompositeCommand i DelegateCommand w Stock Trader RI, zobacz pliki StockTraderRICommands.cs i OrderDetailsViewModel.cs. Polecenia oraz zdarzenia pozwalają na luźne powiązania między widokiem a ViewModel oraz między poszczególnymi ViewModel ami. PRISM dostarcza kilku mechanizmów, które programiści musieli wcześniej zazwyczaj samodzielnie zaimplementowad. Warto zapamiętad różnice pomiędzy zdarzeniami a komendami, programiści często zapominają o nich. Zdarzenia służą do komunikacji, powiadomienia o jakieś akcji i nie mogą byd stosowane do wykonywania poleceo na podstawie interakcji użytkownika z interfejsem do tego służą komendy, które mają dodatkowo specjalną właściwośd CanExecute. Innymi słowy, komenda oznacza zrób coś!, z kolei zdarzenie oznacza to, że akcja właśnie została wykonana. Kompozyt i Composite View Sednem aplikacji kompozytowej jest zdolnośd do łączenia pojedynczych widoków w widok kompozytowy. Często widok kompozytowy definiuje layout dla widoków potomnych. Na przykład, powłoka aplikacji może definiowad obszary: nawigacyjny oraz zawartości dla potomnych widoków hosta w czasie uruchomienia - w sposób jaki pokazano na ilustracji: Rys 2. Przykładowa kompozycja. 3

W Stock Trader RI wzorzec można zaobserwowad w użyciu regionów w powłoce. Powłoka definiuje regiony, które modulują lokalizowanie i dodawanie widoków podczas procesu inicjalizacji. Aby zobaczyd przykłady definiowania regionów zobacz Shell.xaml Widoki kompozytowe nie mogą byd dynamicznie składane - tak jak w przypadku kiedy używamy regionów Prism. Widok kompozytowy może również byd widokiem, który zbudowany jest z kilku innych widoków potomnych, które są tworzone statycznie przez definicję interfejsu użytkownika. Przykładem tego są potomne kontrolki użytkownika zadeklarowane w XAML. Wzorzec Wstrzykiwanie zależności Wzorzec Wstrzykiwanie zależności jest wyspecjalizowaną wersją wzorca Odwróconego sterowania (Inversion of Control). Kiedy problem jest odwrócony - jest to proces uzyskiwania potrzebnej zależności. Wstrzykiwanie zależności używany jest w całym Stock Trader RI i Bibliotece Prism. Podczas używania kontenera, odpowiedzialnośd za konstrukcję spoczywa na kontenerze zamiast używającej go klasie. Podczas konstruowania obiektu, kontener wstrzykiwania zależności rozwiązuje wszystkie dodatkowe zależności. Dzięki temu, konkretna implementacja zależności może byd zmieniana łatwiej kiedy system ewoluuje. Usprawnia to działanie testów i rozrost systemu w czasie ze względu na luźniejsze połączenie. Stock Trader RI używa Managed Extensibility Framework (MEF) aby pomóc w zarządzaniu zależnościami między elementami. Jednakże, biblioteka Prism sama w sobie nie jest przywiązana do konktretnego kontenera wstrzykiwania zależności - mamy wolny wybór w doborze kontenera wstrzykiwania zależności, ale musimy zapewnid adapter, który implementuje interfejs IServiceLocator. Biblioteka Prism zapewnia adaptery dla obu: MEF i Unity Application Block (Unity). W celu zobaczenia przykładu komponentu z wstrzykiwaniem zależności w Stock Trader RI zobacz konstruktor w NewsController.cs. Przykłady Unity: klasa Modulent w UI Composition QuickStart. Wzorzec EventAggregator Wzorzec Event Aggregator przełącza zdarzenia z wielu obiektów na pojedynczy obiekt dla ułatwienia rejestracji klientów. W bibliotece Prism, odmiana wzorca EventAggregator pozwala wielu obiektom lokalizowad i publikowad lub zapisad coś do zdarzenia. Przykład: EventAggregator i PubSubEvent w bibliotece Prism.PubSubEvents. Przykład użycia Event Aggregatora w Stock Trader RI: WatchListViewModel.cs Wzorzec Fasada Wzorzec Fasada upraszcza bardziej złożny interfejs lub zestaw interfejsów w celu ułatwienia ich stosowania lub wyizolowania dostępu do tych interfejsów. Biblioteka Prism zapewnia fasady dla kontenera i usług logowania aby pomóc w izolowaniu biblioteki od zmian w tych usługach. 4

Pozwala to użytkownikowi biblioteki na dostarczanie własnych usług, które będą działad z biblioteką Prism. Interfejsy: IServiceLocator i ILoggerFacade definiują interfejsy fasady w bibliotece Prism do oczekiwania komunikacji z kontenerem lub usługą logowania. Wzorzec odwrócenie sterowania Często wzorzec odwrócenia sterowania używany jest w celu umożliwienia rozbudowy w klasie lub frameworku. Dla przykładu, klasa zaprojektowana z modelem zdarzeniowym w niektórych punktach egzekucji odwraca sterowanie poprzez zezwolenie detektorom zdarzeo na podjęcie akcji kiedy zdarzenie jest wywołane. Dwie formy wzorca odwróconego sterowania zademonstrowane w bibliotece Prism i Stock Trader RI dołączają wstrzykiwania zależności i Template Method. We wzorcu Template Method, klasa bazowa dostarcza wzór lub proces, który wywołuje metody wirtualne lub abstrakcyjne. Z tego powodu dziedziczona klasa może nadpisywad odpowiednie metody aby włączyd wymagane zachowanie. W bibliotece Prism jest to pokazane w klasie UnityServiceLocatorAdapter, aby zobaczyd kolejny przykład użycia wzorca Template zobaczmy StockTraderRIBootstrapper.cs w StockTraderRi. Wzorzec Obserwator Wzorzec Obserwator dąży do uniezależnienia zainteresowanych zmianą stanu obiektu z zmienianego obiektu. W frameworku.net, jest to często poszukiwane przez zdarzenia. Prism pokazuje odmianę wzorca Obserwator w celu oddzielenia zapytania o interakcję z użytkownikiem z aktualnie wybranej interakcji. Jest to robione przez obiekt InteractionRequest, który jest często oferowany przez ViewModel w MVVM. InteractionRequest jest obiektem który hermetyzuje zdarzenie zarządzane przez widok. Kiedy widok otrzymuje zapytanie o interakcję. może wybrad sposób obsługi interakcji. Widok może decydowad o wyświetleniu modalnego okna informacji zwrotnej dla użytkownika lub może wyświetlad dyskretne powiadomienia bez przerywania przepływu pracy użytkownika. Oferując to żądanie jako obiekt zapewnia możliwośd data-bindingu w WPF do żądao i precyzowania odpowiedzi bez konieczności stosowania code-behind w widoku. Wzorzec Model-View-ViewModel Prezentacja modelu jest jednym z wzorców interfejsu użytkownika, które koncentrują się na utrzymaniu logiki prezentacji z dala od reprezentacji wizualnej. Ma to na celu oddzielenie warstwy prezentacji od reprezentacji wizualnej, co pomaga poprawid komfort wprowadzania zmian i testowalnośd. Pokrewne interfejsy użytkownika implementują Model-View-Controller (MVC) i Model- View-Presenter (MVP). Podejście MVVM zademonstrowany w Stock Trader RI jest specjalną implementacją wzorca Presentation Model. Biblioteka Prism została stworzona do bycia neutralną w stosunku do wyboru oddzielonych wzorców interfejsów użytkownika. Można zaimplementowad którykolwiek z wzorców, jednakże biorąc pod uwagę obiekty WPF do wiązania danych (data binding), poleceo i zachowao, wzorzec MVVM jest zalecanym podejściem i doradcy Prism dostarczają dokumentację i sample aby łatwiej zacząd przygodę z MVVM. 5

Przykłądy MVVM: Basic MVVM QuickStart, pliki: QuestionnaireView.xaml, QuestionnaireView.xaml.cs, i QuestionnaireViewModel.cs. Wzorzec Rejestr Wzorzec Rejestr określa podejście do lokalizowania jednego lub więcej obiektów z obiektu dobrze znanego.biblioteka Prism stosuje wzorzec Rejestr kojarząc typy widoku do regionu. Interfejs IRegionViewRegistry i klasa RegionViewRegistry definiują rejestr używany do kojarzenia nazw regionu z typami widoków utworzonymi gdy te regiony są ładowane. Przykład: Moduleint.cs w UI Composition QuickStart. Wzorzec Repozytorium Repozytorium pozwala nam oddzielid sposób w jaki pozyskujemy dane dla aplikacji z kodu, który potrzebuje danych. Repozytorium reprezentuje zbiór obiektów domeny, które kod aplikacji może używad bez konieczności łączenia ze specjalnym mechanizmem, który pobiera te obiekty. Obiekty domen są częścią modelu aplikacji i poprzez pozyskiwanie tych obiektów przez repozytorium, odzyskiwanie repozytorium i strategia aktualizacji może byd zmieniana bez wpływu na pozostałą częśd aplikacji. Ponadto interfejs repozytorium stał się łatwą zależnością do zastąpienia dla celów testów jednostkowych. Separated Interface i Plug-In Zdolnośd do lokalizowania i ładowania modułów, w czasie wykonywania aplikacji daje większe możliwości rozwoju równoległego, rozszerza możliwości wyboru i wdrażania modułu i zachęca do luźniejszej architektury. Następujące wzorce włączają tę możliwośd: Separated Interface - ten wzorzec zmniejsza przymus łączenia poprzez zamieszczenie definicji interfejsu w oddzielonej do implementacji paczce. Kiedy używamy Prism z Unity, każdy modłu implementuje interfejs IModule. Przykład implementacji modułu w UI Composition QuickStart - Moduleint.cs Plug-In - wzorzec ten pozwala konkretnej implementacji klasy na bycie zdefiniowaną w czasie pracy, aby uniknąd konieczności rekompilacji, kiedy konkretna implementacja jest w użyciu lub z powodu zmian w niej zachodzących. W bibliotece Prism jest to obsługiwane przez DirectoryModuleCatalog, ConfigurationModuleCatalog i ModuleInitialiyer, które pracuj razem w celu lokalizowania i inicjalizacji plug-inów IModule. Przykłądy wspierania plug-inów: DirectoryModuleCatalog.cs, ConfigurationModuleCatalog.cs i ModuleInitializer.cs w bibliotece Prism. Ważne: MEF został zaprojektowany do obsługi modelu Plug-In, co pozwala komponentom na deklaratywny eksport i import konkretnych implementacji. Wzorzec Lokalizator Usługi Wzorzec Lokalizator Usługi rozwiązuje ten sam problem co Wstrzykiwanie Zależności (Dependency Injection), ale używa odmiennego podejścia. Pozwala on klasom na lokalizowanie konkretnych usług, którymi są zainteresowane bez potrzeby wiedzy kto implementuje usługę. 6

Najczęściej jest on stosowany jako alternatywa dla Wstrzykiwanie Zależności (Dependency Injection), ale bywa, że niekiedy klasy będą potrzebowały używad lokalizatora usług zamiast wstrzykiwania zależności, jak w przypadku potrzeby rozwiązania wielu realizatorów usługi. Przykład: W bibliotece Prism w usłudze ModuleInitializer rozwiązuje indywidualne IModule. Przykład użycia UnityContainer do lokazlizowania usługi - w UI Composition QuickStart - Moduleint.cs. 7