2016-03-02 12 views

Odpowiedz

62

MVP istnieje do rozwiązania problemu Boga aktywność (aktywność/fragment, który ma zbyt wiele linii).

Chociaż nie było obowiązkowe (można kodować w jakikolwiek wzór, który chcesz), zgadzają się, że wielu deweloperów MVP jest odpowiedni dla systemu Android. Sprawia, że ​​twój kod źródłowy jest czystszy, sprawdzalny, łatwy w utrzymaniu i solidny.

Możesz myśleć o interaktorze jako "Model/Kontroler". Interaktor pobierze dane z bazy danych, usług internetowych lub dowolnego innego źródła danych. Po uzyskaniu danych interactor wyśle ​​dane do prezentera. Wprowadzając zmiany w twoim interfejsie.

Zalety korzystania interaktora w oddzielnej klasie jest to, że oddzielenie swoją klasę, dzięki czemu czystsze i sprawdzalne. Oczywiście, możesz umieścić interaktora w twojej wewnętrznej klasie, ale o co ci chodzi? Wady umieszczenia interaktora w twoim prezenterie sprawiają, że twoja klasa prezentera jest większa i relatywnie trudniejsza w czytaniu i zarządzaniu.

Aktualizacja: Oczywiście jest to tylko nadmierne uproszczenie, jeśli chcesz kopać głębiej można zobaczyć fernando cejas blog lub antonio leiva blog

+0

Jasna odpowiedź. Czy można zastąpić Interactors RxJavą lub lepiej? –

+1

@JiaqiLiu Jest to możliwe, ale nie zawsze (lub lepiej). Nie potrzebujesz RxJava do korzystania z Interactor. Jak każda inna biblioteka, RxJava jest tylko narzędziem. Znajdź najlepsze narzędzie, które odpowiada Twoim potrzebom. Jeśli masz dużo konkurancji, użyj RxJava. – aldok

6

interaktora zawiera Use-przypadki zastosowania, co oznacza, że ​​będzie ona zawierać wszystkie implementacje dla domeny biznesowej projektu.

Tutaj jest bardzo dobrze zorganizowany artykuł na Architecturing Android Applications, using the MVP pattern., który gorąco polecam Ci uczyć.

Również stworzyliśmy Android o nazwie JuicyInsta, z wykorzystaniem wzorca MVP i Instagram API, which is shared here on github.

+1

To zrobić nie wydaje mi się to jasne. Czytanie tego artykułu jest właśnie tym, co wywołało to pytanie - co oznacza "implementacje dla domeny biznesowej" w kategoriach laika? – bkach

+0

@bkach w moim rozumieniu istnieje interfejs, który określa, co firma będzie robić, na przykład bank, stworzysz interfejs z następującą metodą, jak: wypłata, przelew, depozyt itd. Teraz możesz mieć implementację tego interfejsu powiedzmy w zależności od klienta? Lub zgodnie z regułami biznesowymi. Ale mogę się mylić. –

2

Osobiście używam View, Present and interaktora że dla mnie różni się od modelu.

Możesz myśleć o interakcji jako klasie z przydatnymi metodami pobierania danych z bazy danych, serwera itp.. Po uzyskaniu danych możesz zapełnić swój model w programie Interactor i oddać go prezenterowi.

E.G. Możesz mieć LoginInteractor, który tworzy Asynktask, aby uwierzytelnić użytkownika, a następnie zapełnić UserModel otrzymanymi danymi.

5

Interactor to klasa oddzielająca warstwę domeny od warstwy prezentacji. W prostych słowach umożliwia pisanie logiki biznesowej oddzielnie od kodu służącego do manipulowania interfejsem użytkownika (przez powiązanie danych z interfejsem użytkownika/animacją/nawigacją).

W związku z tym Interactor jest pośrednikiem między wzorcem Presenter/ViewModel i Repository.

Nie użyłem wzorca interaktora w MVP, użyłem go jednak w MVVM. Interactor może być używany zamiennie w UseCases.

Na przykład, wykorzystaj przypadek pobierania kategorii do wyświetlenia na liście.

  • Widok (aktywność/fragment) wywoła metodę Presenter/ViewModel, aby uzyskać listę categoryList.
  • Następnie prezenter będzie wywołać metodę interaktora, aby uzyskać categorylist
  • interaktora wywoła metodę repozytorium (CategoryRepository), aby uzyskać categorylist
  • Repository będzie mieć logiki do decydowania, czy należy pobrać kategorie z Web Service (zdalnego źródła danych) lub z DB magazynowanie (lokalne źródło danych) lub z pamięci podręcznej (tymczasowe przechowywanie - może być zmienne w klasie repozytorium).
  • Repozytorium zwróci listę kategorii (pobraną z wybranego źródła danych) do Interactor
  • Interactor będzie przetwarzał na CategoryList (niektóre formatowanie itp.) I wysyła je do Presenter. Interaktora mogą bezpośrednio wysyłać listy do Presenter jeśli potrzebna jest
  • Presenter wywoła metodę wyświetlanie na z categorylist jako parametr bez przetwarzania
  • Zobacz pokaże categorylist z lub bez animacji

Należy zauważyć, że w tym procesie interaktora można uniknąć więc zamiast używać przepływu danych w ten sposób, Repozytorium-> Interaktor-> Prezenter, komunikacja może odbywać się w ten sposób przez Repozytorium-> Prezenter. Tutaj Presenter będzie również częścią warstwy Presentation/Domain. Jak wspomniałem powyżej, Interactor działa jako separator tych dwóch warstw.

Są pewne zwięźle napisane blogi aby wyjaśnić tę koncepcję odniesienia

Mam nadzieję, że to pomoże w roli zrozumienia interaktora w lepszym sposób