Dobre praktyki w projektowaniu aplikacji mobilnych Arkadiusz Waśniewski

Slides:



Advertisements
Podobne prezentacje
Zaawansowane metody programowania – Wykład V
Advertisements

Wzorce Projektowe w JAVA
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
Blok I: PODSTAWY TECHNIKI Lekcja 7: Charakterystyka pojęć: energia, praca, moc, sprawność, wydajność maszyn (1 godz.) 1. Energia mechaniczna 2. Praca 3.
Komitet Gospodarki Miejskiej Projekt Wschodni Zenon Kiczka Przewodniczący Komitetu Gospodarki Miejskiej Krajowa Izba Gospodarcza Warszawa, maj 2014 Regiony.
EFEKT FOTOELEKTRYCZNY ZEWNĘTRZNY I WEWNĘTRZNY KRZYSZTOF DŁUGOSZ KRAKÓW,
Modele biznesowe. Podręcznik Model biznesowy to w pewnym sensie szkic strategii, która ma zostać wdrożona w ramach struktur, procesów i systemów organizacji.
OBOWIĄZKI INFORMACYJNE BENEFICJENTA Zintegrowane Inwestycje Terytorialne Aglomeracji Wałbrzyskiej.
Nauczanie na odległość Dr inż. Marlena Plebańska.
Android WYKŁAD 3. Agenda Odtwarzanie stanu Activity Walidacja danych z widoków Przycisk "wstecz" Material Design Fragmenty Implementacja GUI opartego.
Jak złożyć wniosek ? (GWA) Regionalny Program Operacyjny Województwa Pomorskiego na lata
Tworzenie odwołania zewnętrznego (łącza) do zakresu komórek w innym skoroszycie Możliwości efektywnego stosowania odwołań zewnętrznych Odwołania zewnętrzne.
MULTIMEDIALNE BAZY DANYCH Wprowadzenie. Baza danych Baza danych (database) – magazyn danych – informacji powiązanych tematycznie, umożliwiający ich wyszukiwanie.
Pionierka ogół umiejętności związanych z budowaniem przez harcerzy.
InMoST, Analiza architektury metodą ATAM Jerzy Nawrocki
PRACA Z APLIKACJAMI SYSTEM PRZEMIESZCZANIA oraz NADZORU WYROBÓW AKCYZOWYCH EMCS PL 1.
Portale społecznościowe. Serwis społecznościowy  to serwis internetowy, który istnieje w oparciu o zgromadzoną wokół niego społeczność. Tworzy tak zwane.
Informatyzacja Województwa Świętokrzyskiego – Portal e-Urząd.
Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Benchmarking – narzędzie efektywnej kontroli zarządczej.
Mirek Ostrowski, Radio Wrocław SA Radio hybrydowe wprowadzenie.
OPERATORZY LOGISTYCZNI 3 PL I 4PL NA TLE RYNKU TSL Prof. zw.dr hab. Włodzimierz Rydzkowski Uniwersytet Gdańsk, Katedra Polityki Transportowej.
Wyszukiwanie informacji w Internecie. Czym jest wyszukiwarka? INTERNET ZASOBY ZAINDEKSOWANE PRZEZ WYSZUKIWARKI Wyszukiwarka to mechanizm, który za pomocą.
Urząd Transportu Kolejowego, Al. Jerozolimskie 134, Warszawa, Polityka regulacyjna państwa w zakresie dostępu do infrastruktury na.
ip4inno Moduł XX Zarządzanie własnością intelektualną w projektach B+R Imię i nazwisko prowadzącegoMiejsce i data.
Metodologia tworzenia strategii wg Mirosława Gębskiego Euroinvestment.
Finansowanie wybranych działań w parkach narodowych przy udziale środków funduszu leśnego - zakres finansowy Warszawa, 06 kwietnia 2016r.
Przemiany energii w ruchu harmonicznym. Rezonans mechaniczny Wyk. Agata Niezgoda Projekt współfinansowany przez Unię Europejską w ramach Europejskiego.
PODRÓZNICY AMERYKI POŁUDNIOWEJ. Jesteście podróżnikami badającymi tropikalne zwierzęta, zamierzacie wybrać się do Ameryki Południowej, aby stworzyć album.
Warstwa biznesowaWarstwa techniczna ??? To przejście jest połączone z innym procesem To przejście wywołuje samowyzwalacz To przejście jest warunkowe.
Omówienia dokumentacji przekazanej w ramach projektu uruchomienia rozliczeń transakcji pochodnych i transakcji repo OTC KDPW,
Usługi socjalne dla osób starszych w Helsinkach Päivi Riikonen Satu Vihersaari-Virtanen
20/09/ Model warstwowy OSI. Model warstwowy OSI (Open Systems Interconnection ) – standard wprowadzony przez organizację ISO (International Organization.
EWALUACJA JAKO ISTOTNY ELEMENT PROJEKTÓW SYSTEMOWYCH Sonia Rzeczkowska.
Solphy GlassNexus System Elektronicznej Wymiany Danych Dla Producentów Szyb Zespolonych.
MOTYWACJA. Słowo motywacja składa się z dwóch części: Motyw i Akcja. Aby podjąć działanie (akcję), trzeba mieć do tego odpowiednie motywy. Łaciński źródłosłów.
… przemy ś lenia pedagogiczne. „Najważniejszym okresem w życiu nie są lata studiowania na wyższej uczelni, ale te najwcześniejsze, czyli okres od narodzenia.
OPTYMALNY CEL I PODSTAWY ROZWOJU SZKOŁY. PRZEDE WSZYSTKIM DZISIEJSZA SZKOŁA POWINNA PRZYGOTOWYWAĆ DO ŻYCIA W DRUGIEJ POŁOWIE XXI WIEKU.
Temat : Wykonywanie podstawowych operacji na relacyjnej bazie danych.
Porównywarki cen leków w Polsce i na świecie. Porównywarki w Polsce.
Algorytmy Informatyka Zakres rozszerzony
© 2014 IBM Corporation COMMON POLSKA 2014 JDBC z IBM System i Tomasz Piela & Marcin Wilk Global Technlonogy Services, IBM.
Wyższa Szkoła Informatyki i Zarządzania w Bielsku-Białej Wydział Informatyki Kierunek: Informatyka Specjalność: Systemy Informatyczne PRACA DYPLOMOWA INŻYNIERSKA.
„Gdański model aktywizacji społeczności lokalnych” Gdańsk, 27 kwietnia 2009.
Model Przejść Międzyoperatorskich (na podstawie uwag i rekomendacji izb oraz operatorów) Warszawa, 16 czerwca 2008 r.
Model warstwowy OSI Model OSI (Open Systems Interconnection) opisuje sposób przepływu informacji między aplikacjami programowymi w jednej stacji sieciowej.
WYKŁAD 6 Regionalizacja 1. Regionalizm a regionalizacja 2 Proces wyodrębniania regionów nazywany jest regionalizacją, w odróżnieniu od regionalizmu, który.
Budżet rodzinny Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.
Python. Języki Programistyczne Microcode Machine code Assembly Language (symboliczna reprezentacja machine code) Low-level Programming Language (FORTRAN,
Metody obiektowe Bartosz Walter Szkolenie InMoST 21 lutego 2006.
Analiza, projekt i implementacja zintegrowanego systemu zarządzania i promocji dla branży gastronomicznej Krzysztof Grabalski 5921.
ACCESS - RELACJE TEMAT:. Tworzenie i edycja relacji Relacje w bazach danych tworzone są w celu powiązania z sobą danych z wielu tabel. Tworzymy (edytujemy)
Definiowanie i planowanie zadań typu P 1.  Planowanie zadań typu P  Zadania typu P to zadania unikalne służące zwykle dokonaniu jednorazowej, konkretnej.
Marek Kozłowski Ekosystem PBN. Wprowadzenie Polska Bibliografia Naukowa to portal Ministerstwa Nauki i Szkolnictwa Wyższego gromadzący informacje dotyczące.
Informacja na temat projektu informatycznego „Centralizacja przetwarzania danych” V Krajowa Konferencja System Informacji Przestrzennej w Lasach Państwowych.
Urządzenia i technologie mobilne. Tablet Mobilny komputer większy niż telefon komórkowy, którego główną właściwością jest posiadanie dużego ekranu z zastosowaną.
System operacyjny Renata P. System operacyjny - jest to zbiór nadrzędnych i niezbędnych programów umożliwiających pracę na komputerze. Jest on pośrednikiem.
Dziedziczenie, polimorfizm, Interfejsy
Quick Tips Tutorial Jak uzyskać dostęp do raportów EBSCOhost i EBSCO Discovery Service w EBSCOadmin support.ebsco.com.
Akademia C# lab. 9 Zdarzenia i delegaty.
Programowanie obiektowe
Który system wybrać?.
Budowa, typologia, funkcjonalność
Kurs języka C++ – wykład 13 ( )
PROGRAMY DO KONTROLI RODZICIELSKIEJ
Git - system kontroli wersji
Języki programowania.
Podstawy informatyki Zygfryd Głowacz.
Strukturalne wzorce projektowe
Autor: Magdalena Linowiecka
Zapis prezentacji:

Dobre praktyki w projektowaniu aplikacji mobilnych Arkadiusz Waśniewski

Wprowadzenie Spróbujemy odpowiedzieć na pytanie jak powinna wyglądać dobrze napisana aplikacja dla platformy.NET Compact Framework Główne pole zainteresowań to wzorce projektowe (design patterns)

Porządek spotkania (50 minut) Przedstawienie założeń Opis szkieletu aplikacji Tworzenie obiektów Dostęp do danych Obsługa formularzy Przykładowe rozwiązanie

Terminologia (testy) Stub – klasa zawierająca metody, które nic nie robią. Główne zadanie takiej klasy to umożliwienie kompilacji programu Fake – klasa zawierająca metody, które zwracają ściśle określone wartości, np. wpisane na sztywno w kod klasy Mock – klasa, dla której możemy określić jakie metody czy właściwości mogą być wywoływane, jakie wartości mają być przyjmowane i zwracane

Założenia Napisać lub zanalizować aplikację mobilną Aplikacja składa się z wielu formularzy Jeden formularz może mieć różne zastosowanie (np. formularz z DataGrid) Dane składowane są w zewnętrznym pliku lub plikach na urządzeniu mobilnym Do operowania na danych mamy dedykowany silnik bazodanowy

Założenia c.d. Ilości danych, które wykorzystujemy są rzędu setek lub tysięcy rekordów Aplikacja musi być wydajna i możliwie łatwa w modyfikacji Istnieje konieczność posiadania wielu wersji dla różnych klientów Aplikacja ma działać pod Windows Mobile for Pocket PC i Windows CE

Konsekwencje założeń Formularze wielokrotnie używane powinny być umieszczone w pamięci podręcznej Każdy z wybranych systemów operacyjnych musi mieć własny zestaw formularzy ze względu na duże różnice w sposobie prezentacji

Konsekwencje założeń c.d. Rezygnujemy z przechowywania danych zewnętrznych w plikach XML (dobra wydajność jedynie do rozmiaru kilku KB) Rezygnujemy z wykorzystania wewnętrznie obiektu DataSet (wydajność) Dane, na których będzie operować aplikacja będą odwzorowane w obiekty (encje) i kolekcje obiektów

Szkielet aplikacji Szukamy rozwiązania, które umożliwi odseparowanie formularzy od reszty aplikacji. Jako podstawę rozważań przyjmujemy dwa podstawowe w tej dziedzinie wzorce jakimi są Model-View- Controller oraz Model-View-Presenter

Model-View-Controller Model – odpowiedzialny za logikę i stany biznesowe View – będący warstwą prezentacji Controller – odpowiedzialny za sterowanie przepływem

Model-View-Presenter Model – odpowiedzialny za logikę i stany biznesowe View – będący warstwą prezentacji Presenter – będący mediatorem pomiędzy widokiem a modelem

MVC a MVP We wzorcu MVC widok informuje kontroler o zdarzeniu. Kontroler wywołuje metody modelu, który informuje widok o zmianach We wzorcu MVP widok komunikuje się tylko w prezenterem, który wykonuje żądania korzystając z metod modelu

Jaki wzorzec wybieramy? Model-View-Presenter wzbogacony o klasy obsługujące konkretne przypadki użycia

Tworzenie obiektów Słowo kluczowe new Metoda fabryki, fabryka abstrakcyjna Registry Singleton Inversion of Control oraz Dependency Injection Service Locator

Inversion of Control i Dependency Injection Tworzenie instancji zleca się obiektowi (kontenerowi), który zna zależności pomiędzy klasami. Zazwyczaj powiązania te definiuje się w plikach konfiguracyjnych w formacie XML Mobile Composite UI Application Block wraz z Mobile ObjectBuilder firmy Microsoft opisuje zależności korzystając z atrybutów

Dependency Injection Obiekty zależne oznaczane są dla tej przykładowej implementacji atrybutami public SelectCustomerPresenter( [ServiceDependency] ShellService shell, [ServiceDependency] ICustomerRepository customerRepository) { this.shell = shell; this.customerRepository = customerRepository; } SelectCustomerPresenter presenter = WorkItem.Items.AddNew (); Utworzenie nowej instancji klasy

Service Locator Oparty o wzorzec Singleton Dostarcza obiekt umiejący odnaleźć dowolną usługę wykorzystywaną przez aplikację Może być statyczny lub dynamiczny

Service Locator c.d. class ObjectLocator { private BusinessEntityFactory entities; private RepositoryFactory repositories; private ObjectDictionary services; private TypedDictionary views; private IViewManager viewManager; #region Wzorzec Singleton private static readonly ObjectLocator instance = new ObjectLocator(); private ObjectLocator() { entities = new BusinessEntityFactory(); repositories = new RepositoryFactory(); services = new ObjectDictionary(); views = new TypedDictionary (); viewManager = new FormViewManager(); } #endregion

Service Locator c.d. public static BusinessEntityFactory Entities { get { return instance.entities; } } public static RepositoryFactory Repositories { get { return instance.repositories; } } public static ObjectDictionary Services { get { return instance.services; } } public static TypedDictionary Views { get { return instance.views; } } public static IViewManager ViewManager { get { return instance.viewManager; } }

Dostęp do danych Bridge – wzorzec mostu, którego zadaniem jest usunięcie powiązań pomiędzy abstrakcją (interfejsem obiektu) a implementacją Umożliwia podpięcie różnych silników baz danych Umożliwia testowanie bez konieczności posiadania rzeczywistej bazy danych

Dostęp do danych c.d. interface IRepository { } interface IRepository : IRepository { EntityList GetList(); } class CustomerRepository : IRepository { public EntityList GetList() { EntityList list = new EntityList (); string sql = "SELECT Id, Code, Barcode, Name1, Name2, " + "LocationId, TaxNumber, StatisticNumber, CustomerBranchId, " + "CustomerCategoryId, CustomerGroupId, Phone1, Phone2, Fax, " + " , Web, Description, IsActive FROM Customer";... return list; }

Dostęp do danych – Bridge interface IDataService { EntityList GetList(); } class CustomerRepository : IRepository { private readonly IDataService provider; public CustomerRepository(IDataService provider) { this.provider = provider; } public EntityList GetList() { return provider.GetList(); } Możemy również zdefiniować domyślny konstruktor korzystający z Service Locator

Dostęp do danych – Bridge class Repository : IRepository { private readonly IDataService provider; public Repository(IDataService provider) { this.provider = provider; } public EntityList GetList() { return provider.GetList(); } class CustomerRepository : Repository { public CustomerRepository(IDataService provider) : base(provider) { }

Dostęp do danych – wywołanie Warianty wywołania repozytorium przy wykorzystaniu wzorca Service Locator IRepository repository = ObjectLocator.Repositories.GetCustomerRepository(); IRepository repository = ObjectLocator.Repositories.Get >();

Formularze Proces tworzenia formularza powoduje odczuwalne dla użytkownika opóźnienia zwłaszcza jeśli konieczne jest załadowanie lub przygotowanie danych Formularze wielokrotnie wykorzystywane muszą mieć odpowiednio utworzony lub odtworzony stan

Formularze c.d. Wyświetlenie formularza może odbywać się na dwa sposoby: metodą Show() lub ShowDialog() Aktywowanie formularza niemodalnego wywołującego formularz modalny! Jak wyświetlić formularz wielokrotnego zastosowania przy pomocy ShowDialog() tak aby ekran nie migotał

Przykład

Przykład – założenia Definiujemy interfejs wspólny dla wszystkich widoków Każdy interfejs widoku wie jaki prezenter go obsługuje Widoku są rejestrowane w systemie w powiązaniu z interfejsami, które implementują Każdy prezenter wie, z jakiego interfejsu widoku będzie korzystać (wyświetlanie!)

Przykład – założenia c.d. Każdy prezenter posiada skojarzony ze sobą interfejs umożliwiający dowolnemu kontrolerowi zarządzanie prezenterem (w ramach dowolnego przypadku użycia) Interfejsy implementowane przez kontroler nie powinny być widoczne dla obiektów wywołujących kontroler Wyświetlaniem widokami zarządca odpowiedni obiekt

Interfejs bazowy widoku Lifetime – czas życia widoku Presenter – obiekt kontrolujący widok interface IView { string Title { set; } Lifetime Lifetime { get; set; } Presenter Presenter { get; set; }

Przykładowy interfejs widoku interface ILoginView : IBaseView { string Username { get; set; } string Password { get; set; } void FocusOnUsername(); void FocusOnPassword(); void ShowErrorMessage(string message); }

Rejestracja widoków public override void AddViews() { #if ((PocketPC || WindowsCE || Smartphone)) ObjectLocator.Views.AddNew (); ObjectLocator.Views.Add ( Lifetime.SingleCall); ObjectLocator.Views.Add ( Lifetime.SingleCall); ObjectLocator.Views.Add ( Lifetime.SingleCall); ObjectLocator.Views.Add ( Lifetime.SingleCall); ObjectLocator.Views.AddNew (); #endif }

Przykładowy prezenter sealed class LoginPresenter : BasePresenter { public LoginPresenter(ILoginPresenterController controller) : base(controller) {} protected override void OnInitialize() { base.OnInitialize(); View.Title = "Logowanie do programu"; Command loginCommand = new Command("Zaloguj", this.LogIn); Command closeCommand = new Command("Zamknij", Controller.OnCancel); View.AddActionCommand(loginCommand); View.AddActionCommand(closeCommand); View.Username = string.Empty; View.Password = string.Empty; View.FocusOnUsername(); } private void LogIn() {... } }

Przykładowy interfejs prezentera dla kontrolera interface ILoginPresenterController : IPresenterController { void OnCancel(); void OnLogIn(); }

Przykładowa implementacja interfejsu prezentera Poniższy przykład wykorzystuje implementację jawną (explicitly) w odróżnieniu od niejawnej (implicitly). Dzięki temu obiekt wywołujący kontroler widzi jedynie metody publiczne lub wewnętrzne tegoż kontrolera #region ILoginPresenterController Members void ILoginPresenterController.OnCancel() { ObjectLocator.ViewManager.Exit(); } void ILoginPresenterController.OnLogIn() { ObjectLocator.ViewManager.Show(this.Items.Get ()); } #endregion

Formularze – interfejs klasy zarządzającej interface IViewManager { string Title { set; } TPresenter Display (TPresenter presenter, params object[] parameters) where TPresenter : Presenter; TPresenter Display (TPresenter presenter, Action action, params object[] parameters) where TPresenter : Presenter; void Exit(); TPresenter Show (TPresenter presenter, params object[] parameters) where TPresenter : Presenter; TPresenter Show (TPresenter presenter, Action action, params object[] parameters) where TPresenter : Presenter; }

Przykładowy test [Test] public void LogInWithCorrentUsernameAndPassword() { DynamicMock controllerMock = new DynamicMock( typeof(ILoginPresenterController)); DynamicMock viewMock = new DynamicMock( typeof(ILoginView)); LoginPresenter presenter = new LoginPresenter( (ILoginPresenterController)controllerMock.MockInstance, (ILoginView)viewMock.MockInstance); viewMock.ExpectAndReturn("get_Username", "admin"); viewMock.ExpectAndReturn("get_Password", "1415"); controllerMock.Expect("OnLogIn"); base.InvokeMethod(presenter, "LogIn"); viewMock.Verify(); controllerMock.Verify(); }

Więcej informacji Driven-Design-Patterns- Examples/dp/

Dziękuję za uwagę Można zadawać pytania...