Jak oddzielić View i Presenter w Androidzie, podczas gdy reakcje na działania użytkownika (Presenter część MVP) są ustawione na te same działania, które pokazują elementy GUI (View część MVP).
„W prezenterie widoku modelu, jak mówią Martin Fowler lub Michael Feathers [2], logika interfejsu użytkownika jest podzielona na klasę o nazwie prezenter, która obsługuje wszystkie dane wejściowe od użytkownika i która mówi„ głupemu ”widokowi, co i kiedy zrobić display ”(cytowano stąd ).
Do tej pory myślałem, że jedną z głównych funkcji Androida jest inteligentna Aktywność, która podejmuje działania, reaguje na nie i pokazuje wyniki. Czy schemat MVP jest sprzeczny z filozofią Androida? Czy warto to zrealizować na Androidzie? Jeśli tak, jak można to zrobić?
programmers
pytania są bardziej kontrowersyjne pytanie „co sądzisz o… / czy to dobrze, czy źle…”, podczas gdystackoverflow
byłoby bardziej jak „Czy istnieją przykłady mvp w Androidzie”. Dla mnie oba miejsca są w porządku.Odpowiedzi:
Aplikacje na Androida są zasadniczo zbudowane wokół Model-View-Controller (MVC) - MVP brzmi tak samo, chociaż nie słyszałem wcześniej tego terminu. Działania wypełniają rolę Kontrolera, Widoki XML są po prostu takie (chociaż można je programowo budować w Działaniu - po prostu łatwiej i prościej jest to zrobić w XML), a Model sam piszesz. Tak, ten model jest całkiem praktyczny.
Możliwym powodem, dla którego mogłeś nie słyszeć dużo o tym modelu projektowym, jest to, że struktura systemu Android zmusza Cię do oddzielenia widoku. Ponieważ aplikacja na urządzenia mobilne jest zwykle niewielka, ludzie nie używają w pełni MVC; mają tendencję do tworzenia warstw widoku i akcji, w których warstwa akcji wykonuje większą część (małego) modelu.
Jeśli piszesz aplikację wieloplatformową, możesz przyjrzeć się czterowarstwowemu podejściu: Widok, Działanie, Logika biznesowa i Model. Warstwy Widok i Działanie byłyby specyficzne dla platformy, podczas gdy Logika biznesowa i Model nie zmieniłyby się. Zasadniczo dzielisz interakcje prezentera i użytkownika na warstwę akcji, która wywołuje warstwę logiki biznesowej w celu wykonania żądanej przez użytkownika akcji.
źródło
Action
niezależności platformy warstwy (= Prezentacja) - przynajmniej wtedy, gdy różne platformy oferują podobne możliwości interfejsu użytkownika.Nie mam doświadczenia w programowaniu na Androida, ale po zapoznaniu się z niektórymi wprowadzającymi samouczkami programowania na Androida nie widzę powodu, dla którego MVP powinien być mniej przydatny, jak w jakimkolwiek innym frameworku sterowanym zdarzeniami.
Activity
Klasa nie jest bardzo różni się odDialog
lubForm
na innych forach, więc powinno być łatwe, aby stworzyć klasę „Activitity Presenter” dla każdej podklasy aktywność danej aplikacji i umieścić tam chipsetów.Zdarzenia wysyłane do „Aktywności” muszą być przekazane prezenterowi, a jeśli prezenter sam wysyła zdarzenia lub wywołuje inne funkcje zależne od systemu, Aktywność musi zapewniać powiązane funkcje za pośrednictwem interfejsu udostępnianego prezenterowi. Ale to w zasadzie to samo, co w każdym innym frameworku GUI, który znam.
źródło
MVP jest zdecydowanie przydatny dla Androida. Pomaga zorganizować i przetestować kod w jednostce. A najlepsze jest to, że nowi ludzie czytający Twój kod będą w stanie zrozumieć kod i zaczną w nim uczestniczyć, gdy tylko dowiedzą się, gdzie powinien iść. Oto bardzo pomocny link do zrozumienia MVP z przykładami .
Oto krótkie wyjaśnienie wszystkich trzech składników MVP
Widok
W Androidzie MVP widok zawiera dwie rzeczy Aktywność - zasób Androida Widok - interfejs Java Aktywność implementuje widok i wstrzykuje się (prezenter interfejsu) do prezentera, dzięki czemu prezenter może rozmawiać z aktywnością za pomocą interfejsu widoku. Pierwsze trzy bloki diagramu pokazują komunikację między View a Prezenterem.
Prezenter
Prezenter działa jako środkowa warstwa między Widokiem a danymi / modelem. View (Activity) wyświetla polecenia prezenterowi, aby coś zaprezentować, a następnie prezenter pobiera dane z bazy danych / modelu i przekazuje prezentowalną formę danych do View. Następnie View zajmuje się wyświetlaniem tych danych na ekranie. I pamiętaj, że Presenter to zwykła klasa Java, nie powinna zawierać żadnego z komponentów Androida, w przeciwnym razie utrudni to testowanie jednostki prezentera.
Jeśli chcesz użyć bazy danych w prezencie, spraw, aby aktywność utworzyła instancję bazy danych i wstrzyknęła ją do prezentera. Pomoże to wyśmiewać bazę danych podczas testów jednostkowych i umożliwi przetestowanie logiki biznesowej.
Model
Model w MVP to nic innego jak twoje źródło danych. Widok nie komunikuje się bezpośrednio z danymi, zamiast tego nakazuje Prezenterowi przetworzenie danych i przekazanie informacji, które można wyświetlić bez dalszych modyfikacji.
źródło