Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MVVM w praktyce

MVVM w praktyce

Jak pisać łatwo testowalny kod
Poznańska Grupa .NET

Avatar for Bart Sokol

Bart Sokol

May 07, 2014
Tweet

More Decks by Bart Sokol

Other Decks in Technology

Transcript

  1. Confidential 1 © Rule Financial 2014 Confidential Jak pisać łatwo

    testowalny kod MVVM w praktyce Autor: Bartosz Sokół Poznańska Grupa .NET 7 maja 2014
  2. Confidential 2 © Rule Financial 2014 Agenda Dlaczego MVVM? Warstwy,

    warstwy, warstwy... Testowanie – jak i dlaczego Demo Q&A
  3. Confidential 3 © Rule Financial 2014 Dlaczego MVVM? Wzorzec dopasowany

    do realiów aplikacji .NET z interfejsem definiowanym deklaratywnie w XAML-u Jasna separacja warstw aplikacji i komunikacja pomiędzy nimi Sprzyja pisaniu testowalnego kodu
  4. Confidential 4 © Rule Financial 2014 Warstwy, warstwy, warstwy... Model

    ViewModel / Controller View Bindings WPF Events Commands Callbacks and Streams Service Methods
  5. Confidential 5 © Rule Financial 2014 View Definiowany głównie w

    XAML-u, deklaratywny Źródłem i celem danych jest kontrakt (interfejs) implementowany przez ViewModel Would it Blend? – przy dobrej implementacji widoki można edytować niezależnie od reszty aplikacji Komunikacja z innymi warstwami poprzez Binding, Command i kontrakty / interfejsy (np. INotifyPropertyChanged)
  6. Confidential 6 © Rule Financial 2014 ViewModel / Controller ViewModel

    Przechowuje stan aplikacji (DataContext dla widoku) Całkowicie niezależny od widoku Wykorzystuje metody Controllera do wykonywania akcji Controller Obsługuje tzw. lekką logikę Bezstanowy Związany z ViewModelem Asynchroniczny
  7. Confidential 7 © Rule Financial 2014 Model Warstwa biznesowa aplikacji

    Zdefiniowany jako serwisy (lokalne, messaging itp.) Niezależny od wyższych warstw aplikacji Asynchroniczny, komunikuje się z innymi warstwami np. przez callbacki
  8. Confidential 8 © Rule Financial 2014 Testowanie – Dlaczego? Pozwala

    spać po nocach Mniej nadgodzin Redukuje stres i ryzyko wielu chorób Można napisać więcej kodu Wieczny szacunek i uznanie od innych członków zespołu
  9. Confidential 9 © Rule Financial 2014 Testowanie - interfejsy Każda

    z warstw reprezentowana jest przez jej interfejs Pozwala to na niezależne testowanie klas (testy jednostkowe) i upraszcza testowanie powiązań pomiędzy klasami (testy integracyjne) Wszystkie publiczne metody i właściwości klas powinny być eksponowane przez interfejs; dzięki temu unikamy potrzeby bezpośredniego korzystania z klas (loose coupling)
  10. Confidential 10 © Rule Financial 2014 Testowanie i IoC Odwrócenie

    zależności pozwala na proste podmienianie implementacji na fake W testach konfigurujemy kontener aby zwracał mocki zależności testowanej klasy Rejestrujemy testowaną klasę w kontenerze pod jej interfejsem i tworzymy instancję przez wyciąganie z kontenera – dzięki temu mamy pewność, że wszystko co ważne jest w interfejsie i nie ma ścieżek bez pokrycia
  11. Confidential 11 © Rule Financial 2014 Testowanie – jak to

    zrobić? Tworzymy i konfigurujemy wymagane mocki Rejestrujemy wszystkie zależności w kontenerze Wyciągamy SUT z kontenera i wykonujemy testowaną akcję Weryfikujemy wynik testu Takie testowanie jest zgodne z wzorcem AAA - Arrange-Act- Assert