2016-03-19 17 views
6

Widziałem wiele projektów, które pokazują, jak zaimplementować logowanie w MVP, ale nie mogę znaleźć niczego związanego z logowaniem się do Google/Facebooka.Jak postępować zgodnie z architekturą MVP z pakietami SDK innych firm?

Co należy zrobić w przypadku, gdy przepływ logowania jest ściśle związany z cyklem życia komponentów systemu Android? Widzę główną zaletę MVP w tym, że tworzymy abstrakcję powyżej Context, ale ta abstrakcja okaże się zbyt skomplikowana, gdy będziemy musieli podążać, na przykład, przepływ danych z Facebooka: musisz zarejestrować FacebookCallback z CallbackManager, zadzwonić pod numer logInWithReadPermissions() (przekazanie aktywności/Fragment do tego), delegować onActivityResult() do callbackManager i to spowoduje uruchomienie metod Facebooka.

Co mam na uwadze to, aby stworzyć coś podobnego

interface AuthInteractor { 
    void doFacebookLogin(); 
    void doGoogleLogin(); 
} 

którego realizacja będzie wiedział o kontekst i zainicjować GoogleApiClient. Zostanie on wstrzyknięty w Presenter, ale co z tymi wszystkimi callbackami (szczególnie w SDK Facebooka) sprawy staną się zbyt skomplikowane. Czy w takich przypadkach lepiej nie pomijać MVP?

+0

Nie tak pewien swojej pytanie, ale ja nie zgadzam się z interfejsem, IMHO utworzyłbym klasę FacebookLogin i GoogleLogin, która implementuje ten sam interfejs i abstrahuje szczegółowość każdego przepływu logowania. – jonathanrz

+0

@jonathanrz Tak, zrobiłem to samo w moich poprzednich projektach i zamierzam ponownie użyć tego kodu, dwóch menedżerów może być członkami AuthInteractorImpl. Ale naprawdę nie lubię takiej architektury i lepiej napisać to bez MVP – Yaroslav

+0

, ponieważ przepływ uwierzytelniania powinien pozostać w kontrolerze, nie widzę powodu, dla którego łamie wzór MVP. – jonathanrz

Odpowiedz

2

Chyba pytasz to pytanie, ponieważ starasz się połączyć dwa „Pomysły” do jednego jedno w głowie:

  1. Aktywny/Fragment są MVP widoki
  2. trzecie SDK firm zależnych na Aktywność (lub przynajmniej Kontekst) w celu uzyskania dostępu do zasobów platformy dostępnych dla twojej aplikacji

Natknąłem się na podobne problemy około dwa lata temu, kiedy badałem wdrożenia MVP w systemie Android, i doszedłem do wniosku, że jedynym sposobem na uregulowanie wszystkich emisji es tego rodzaju jest porzucenie idei Activity/Fragment będących poglądami MVP.

napisałem szczegółowe omówienie tego zagadnienia w tym poście: Why Activities in Android are not UI Elements

I jest także poradnik o tym, jak wdrożyć lepsze MVP w Androidzie: MVP and MVC in Android

Powiązane problemy