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

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