Chociaż stare, jest to bardzo interesujące pytanie. Odtąd MVP/MVC/MVVM to rodzaj "buzz-words" w społeczności Androida, to pytanie zasługuje na bardziej kompletną odpowiedź (IMHO).
Krótka odpowiedź:
pojedyncze prezenter może być używany z wieloma widokami
odpowiedź Long:
W ogóle nie ma jednej definicji MVP/MVC - istnieją wiele podejść do realizacji tych wzorów architektonicznych. Nie podałeś definicji "twojego" MVP, dlatego mogę tylko zgadywać, co masz na myśli.
To powiedziawszy, istnieją pewne "najlepsze praktyki" w programowaniu obiektowym, które każda implementacja dowolnego wzoru architektonicznego powinna (idealnie) brać pod uwagę.
To, o co pytasz, to czy możesz ponownie wykorzystać jedną implementację prezentera z różnymi widokami, prawda? Spójrzmy na to pytanie przez pryzmat zasad SOLID.
"L" oznacza Liskov Substitution Principle (LSP). Jest to jeden z najbardziej niezrozumiany zasad SOLID, ale ogólna idea tej zasady mówi co następuje:
LSP: jeśli fragment kodu działa z obiektu klasy A, należy również bezproblemową pracę z obiektami dowolnej podklasy (tj podklasy musi być użyteczny zamiast całym świecie)
Przykład LSP naruszenie w Androida jest Context
: sublasses z Context
(np Application
i Activity
) nie są równoważne.Niektóre kod wymagające Context
mogą bezproblemowo współpracować z Application
, ale jeśli przejdziesz przez Activity
, nastąpi wyciek pamięci (jest to bardzo rozpowszechniony błąd w aplikacjach systemu Android, który jest spowodowany głównie przez naruszenie LSP przez twórców Google'a).
Powrót do góry pytania. Jestem zakładając, że prezenterka wygląda następująco (zauważ interfejs dla widoków):
public class SomePresenter {
/**
* Views bound to this presenter must implement this interface
*/
interface SomeView {
void doSomething1();
void doSomething2();
}
public void bindView(SomeView someView) {
// view binding logic
}
// more presenter's methods
}
LSP stwierdza, że każda klasa, która implementuje SomeView
może być użyteczny z SomePresenter
. Prezentujący nie powinien przejmować się tym, czy przekazana mu implementacja SomeView
to: Activity
, Fragment
, lub, może, tylko fałszywa do testu jednostkowego.
Tak więc pełna odpowiedź na twoje pytanie brzmi: jeden prezenter może być ponownie użyty z różnymi widokami, o ile prezenter nie zależy od konkretnych implementacji poglądów, ale tylko od ich super-klasy.
Dodatkowe informacje:
Przypuszczam, że poprosił swoją pytanie, ponieważ, z jednej strony, czułeś, że pojedyncza prezenter powinien być w stanie pracować z różnymi widokami (tylko myśleć o testach A/B różnych UI), ale z drugiej strony fakt, że poglądy są Activity
i Fragment
sprawił, że czujesz się niekomfortowo z tą myślą.
Moja osobista opinia jest taka, że w MVC/MVP nie powinno być widoków Activity
ani Fragment
. Uzasadnienie tego roszczenia jest podsumowane w tym wpisie: Why Activities in Android are not UI Elements.
Proponuję także, aby przyjrzeć się różnym podejściem do implementation of MVP in Android - jeśli chcesz używać tego jednego, byłoby oczywiste dla Ciebie, że prezenter powinien być w stanie pracować z różnymi widokami, i nie miałbyś takiego odczucia "coś nie jest w porządku".
Spróbuj tego linku http://magenic.com/Blog/Post/6/An-MVP-Pattern-for-Android lub https://android-arsenal.com/tag/163 lub tego http: // www .slideshare.net/jkumarr/design-in-android –
@AliRaj dziękuję za to .. Właśnie czytam to w tej chwili. –
Hey @ DJ-DOO ten film pokazuje, jak zaimplementować MVP https://www.youtube.com/watch?v=iXDAcWEhYSk&t=5s –