mvp - model view presenter (polish)

27
MVP

Upload: przemyslaw-lusnia

Post on 13-Apr-2017

48 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: MVP - Model View Presenter (polish)

MVPM O D E L - V I E W -

W H E R B I E

E R

Page 2: MVP - Model View Presenter (polish)

P O C O M V P ?

J E D N O L I T A S T R U K T U R A

S E P A R A C J A L O G I K I T E S T O W A L N Y K O D= >

Separacja frameworka Android (View) od logiki ekranów(Presenter) i logiki biznesowej (Model) => testowalny kod.Dlaczego? Bo ciężko zamockować Activity czy Fragment.Robolectric był jakimś sposobem, ale nienaturalnym, bogwarantował testy na jednej jedynej implementacji Androida w 1SDK. Urządzeń są tysiące.

Page 3: MVP - Model View Presenter (polish)

P O C O D A G G E R ?

Dagger gwarantuje soliD – Dependency Inversion.Pozwala na pisanie obiektów, które łatwo możnazamockować. Jednak samego Daggera nie powinniśmyużywać w testach, ze względu na zwiększeniekomplikacji.

Page 4: MVP - Model View Presenter (polish)

D A G G E R : 1 C Z Y W I E L EK O M P O N E N T Ó W ?

To zależy. W prostych aplikacjachwystarczy 1. W złożonych, pisanychprzez większą liczbę programistówpisze się komponent per Presenter.Dlaczego? Ma to podobnezastosowanie, jak ograniczeniewidoczności obiektów w klasach:niektórych obiektów nie będziemyw stanie używać tam, gdzie niepowinniśmy.

Mozna bez Daggera,ale wymuszenie daje

wiecej pewnosci

Page 5: MVP - Model View Presenter (polish)

O G Ó L N A S T R U K T U R A M V PW P R O J E K T A C H

A N D R O I D O W Y C H

V = VC

View w MVP to także Controller w najprostszej postaci.Obsługa listenerów obiektów dziedziczących po klasieView zawiera się w obrębie Activity, Fragmentu, View.

Page 6: MVP - Model View Presenter (polish)
Page 7: MVP - Model View Presenter (polish)

N A S Z A S Z C Z E G Ó Ł O W AS T R U K T U R A M V P

MODEL CLASSES, UTILS

VIEW

PRESENTER

INTERACTORREPOSITORY

Interface

InterfaceInterface

Call function

Call function

Page 8: MVP - Model View Presenter (polish)
Page 9: MVP - Model View Presenter (polish)

N A Z W Y F U N K C J I WP R E S E N T E R Z E

Nie mogą być callbackami frameworka Android(onCreate itp). Mają wyrażać autentyczne zadaniefunkcji. Gdyby nazwy były takie jak callbacków, tozaciemnilibyśmy prawdziwą funkcję Presenterów,stworzylibyśmy kod trudny do odczytania.

I nie widzielibysmy co testujemy

Page 10: MVP - Model View Presenter (polish)

K O M U N I K A C J A WP R E S E N T E R Z E

Interactory oraz Repository komunikują się zPresenterem za pomocą callbacków

Page 11: MVP - Model View Presenter (polish)

R O Z D Z I E L E N I E L O G I K I ,V I E W A P R E S E N T E R :

Początkowy problem. Wniosek: wszystkie dane do Presentera. Także te zestanem widoków.

ALE: Would the logic in the presenter make sense if I hada different type of UI?

Page 12: MVP - Model View Presenter (polish)

C O J E S T W V I E W T Y P UA C T I V I T Y / F R A G M E N T ?

Page 13: MVP - Model View Presenter (polish)

C O J E S T W V I E W T Y P UA C T I V I T Y / F R A G M E N T ?

Page 14: MVP - Model View Presenter (polish)

C O J E S T W V I E W T Y P U . . .V I E W ?

Page 15: MVP - Model View Presenter (polish)

C O J E S T W P R E S E N T E R Z E ?

Page 16: MVP - Model View Presenter (polish)

C O J E S T W P R E S E N T E R Z E ?

Page 17: MVP - Model View Presenter (polish)

C O J E S T W P R E S E N T E R Z E ?

Page 18: MVP - Model View Presenter (polish)

C O J E S T W P R E S E N T E R Z E ?

Page 19: MVP - Model View Presenter (polish)

I N T E R F E J S Y D L A V I E W IP R E S E N T E R A

Dla widoku jak najbardziej, ułatwia to mockowanie wtestach. Dla Presentera nie ma to sensu. Zbędna,bezużyteczna dodatkowa praca.

Page 20: MVP - Model View Presenter (polish)

@ S I N G L E T O N

Dagger2 używa tej annotacji do określenia scope'aTAK w RepositoryNIE w Presenterach (wyklucza się z ViewPagerem), orazpewne problemy, gdy Activity startowa posiadapresenter @SingletonNIE w Interactorach

NIE jeśli to nie jest potrzebne.TAK? To ostrożnie – potencjalne memory leaki, gdyużywamy pól klas do przechowywania referencji dolistenerów.

Page 21: MVP - Model View Presenter (polish)

K O M U N I K A C J A M I E D Z YP R E S E N T E R A M I ?

"When using multiple presenters, the easiest way topass information between them is by adopting somekind of event bus."

Page 22: MVP - Model View Presenter (polish)

T E S T Y

Unit testy – testowane Presentery, Interactory,Repository, klasy Utils i pomocnicze klasy modelu.70%Instrumented testy – Espresso i testowanie częściView. 30%

Page 23: MVP - Model View Presenter (polish)

U S P R A W N I E N I A

Constructor Injection

Page 24: MVP - Model View Presenter (polish)

U S P R A W N I E N I A

Repository powinny zawierac sie w Interactorach, anie w Presenterze, gdzie sa na jednym poziomie zInteractoramiNie uzywaj narzedzia Canva

Page 25: MVP - Model View Presenter (polish)

K O S Z T Y

Stworzenie pierwszego MVP i jedność myśleniaprogramistów w jego kwestii to największa bariera.Warto zauważyć, że zmiany w strukturze MVPwymagają zmiany w obrębie całego projektu – imszybciej wprowadzone, tym lepiej. My spororefaktoryzowaliśmy, zanim doszliśmy do prawiesatysfakcjonującego wyniku. Myślę, że nakład wyniósł 1i pół tygodnia pracy każdej osoby.

Page 26: MVP - Model View Presenter (polish)

C Z Y M A T O S E N S WK A Ż D Y M P R Z Y P A D K U ?

Tak, bo separacja logiki od frameworkaAndroid. Ale można użyć czegoś innego (MVVM, VIPER,MVC).

Page 27: MVP - Model View Presenter (polish)

https://medium.com/@mherych/do-i-need-to-create-interfaces-for-my-presenters-9abe0897f873#.ymza49nw9http://hannesdorfmann.com/mosby/mvp/ - IMO najlepsze przedstawienie ideihttps://www.reddit.com/r/androiddev/comments/3zxkb5/should_presenters_be_singletons_or_view_scoped/ - luzna rozmowa o presenterach i singletonachhttps://medium.com/square-corner-blog/android-leak-pattern-subscriptions-in-views-18f0860aa74c#.8so7uez8k - dlaczego inicjalizacja i czyszczenie Presentera wcallbackach onAttachToWindow oraz onDetachFromWindow w View?https://code.tutsplus.com/series/how-to-adopt-model-view-presenter-on-android--cms-1012 - jak nie pisac interfejsoww MVP. TRAGEDIA, choc wydaje sie spelniacwszystkie zalozenia czystego kodu.https://github.com/googlesamples/android-architecture - MVP od Google'ahttps://riggaroo.co.za/introduction-automated-android-testing/ - super tutorial o https://github.com/android10/Android- - FERNANDO CEJAS i jego MVP