Zdaję sobie sprawę, że to pytanie jest bardzo stare, ale myślę, że może być przydatne dla innych, takich jak ja, które natkną się na to poprzez wyszukiwanie.
Pracuję w systemie Android od 9 miesięcy od strony serwera, gdzie pełne testy jednostkowe i wielowarstwowe architektury są powszechne i działają dobrze.
Dzięki wielu próbom i błędom zdecydowanie sugerowałbym użycie wzorca Model View Presenter
, a nie kontrolera widoku modelu.
Ogromnym problemem, który znalazłem, jest to, że Activities
/Fragments
ma cykl życia, który jest poza kontrolą użytkownika i może prowadzić do nieoczekiwanych problemów.
Na przykład nasza główna aplikacja na Androida chce być używana w trybie poziomym na tabletach. Robimy to w OnCreateView()
lub OnCreate()
.
Na Nexusie 7, domyślny widok to portret, więc zdarza się, że uruchamia on działanie w trybie portretowym, nasz kod mówi, że idziemy do krajobrazu, a android ostatecznie tworzy klasę activity
3 razy!
Podłączyliśmy żądania sieciowe do onCreate
, które w tym przypadku kończą się 3 razy.
Oczywiście, możemy dodać logikę, aby wyszukać zduplikowane połączenia, ale moim zdaniem lepiej byłoby, gdyby podjęto próbę podziału interfejsu użytkownika od logiki biznesowej.
Moja rekomendacja to użycie wzoru fabrycznego do utworzenia prezenterów z działania, ale upewnij się, że fabrycznie zwraca tylko to samo wystąpienie. Prezenter może następnie zawierać logikę, aby wykonać żądanie sieciowe, wyszukać duplikaty i zwrócić wyniki z pamięci podręcznej i ogólną logikę biznesową.
Kiedy wyniki z połączeń sieciowych powrócić, albo po do magistrali, takich jak Otto których aktywność (rejestrować zdarzenia na onResume()
i wyrejestrowania podczas onPause()
) został zarejestrowany, lub upewnić się, że interfejs wywołania zwrotnego realizowany przez działalność została zaktualizowano do ostatniej aktywności w prezenterze.
W ten sposób kod w jednostce presenter
jest testowany jednostkowo i nie jest zależny od testowania warstwy łukowatej interfejsu użytkownika.
Nie odpowiadasz na jego pytanie.Odpowiedziałeś na temat architektury interfejsu użytkownika. Myślę, że jego pytanie dotyczy bardziej globalnej architektury aplikacji: czy powinniśmy tworzyć osobne warstwy, takie jak Prezentacja (= MVC), Logika biznesowa i Trwałość danych. Ten wzorzec jest bardzo powszechny w aplikacjach internetowych. – clemp6r
Uzgodniono z @ clemp6r. –