2010-07-23 16 views
55

W ten sam sposób aplikacja internetowa lub komputerowa może mieć trzy lub więcej warstw - np. Interfejs użytkownika, biznes i dane - jaka jest sugerowana struktura aplikacji na Androida? Jak pogrupujesz klasy, jakie masz warstwy itp.?Architektura aplikacji Android - jaki jest sugerowany model?

Właśnie uruchamiam programistę Android (aplikacja internetowa, która musi reagować na przychodzące powiadomienia) i nie czuję właściwie struktury, do której dążę. Sugestie docenione.

Odpowiedz

15

Akcje, widoki i aktywacje w systemie Android są pieczone w drodze do pracy z interfejsem Android i są implementacją modelu widoku-widoku-widoku modelu, który jest strukturalnie podobnym (w tej samej rodzinie) kontrolerem widoku modelu .

Według mojej najlepszej wiedzy, nie ma sposobu, aby wyrwać się z tego modelu. Prawdopodobnie można to zrobić, ale prawdopodobnie stracisz wszystkie korzyści, jakie ma istniejący model, i musisz przerobić własną warstwę interfejsu, aby działała.

MVC można znaleźć w poniższych:

  • zdefiniować swój user interface w różnych plikach XML uchwałą/sprzętu itp
  • zdefiniować swoją resources w różnych plikach XML przez narodowe itp
  • przechowywać dane w SQLite lub dane niestandardowe w/assets/folderu, czytaj więcej o resources and assets
  • rozszerzyć clases jak ListActivity, TabActivity i skorzystać z pliku XML przez inflaters
  • Można utworzyć wiele klas, jak chcesz dla danego modelu i mają własne pakiety, które będą działać jako struktura
  • Wiele Utils już było napisane dla ciebie. DatabaseUtils, Html,

Nie istnieje jeden wzorzec MVC, do którego można się posłużyć. MVC stwierdza tylko mniej więcej, że nie należy mieszać danych i widoku, aby np. widoki są odpowiedzialne za przechowywanie danych lub klas, które przetwarzają dane bezpośrednio wpływają na widok.

Niemniej jednak, w jaki sposób Android radzi sobie z klasami i zasobami, czasami trzeba nawet postępować zgodnie ze wzorcem MVC. Bardziej skomplikowane w mojej opozycji są czynności, które czasami odpowiadają za widok, ale jednocześnie działają jako kontroler w tym samym czasie.

Jeśli definiujesz swoje widoki i układy w plikach xml, załaduj zasoby z folderu res, a jeśli unikasz więcej lub mniej łączenia tych elementów w kodzie, to mimo to podążaj za wzorcem MVC.

+17

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

+0

Uzgodniono z @ clemp6r. –

15

IMHO, Android "chce" podążać za wzorcem MVC, ale widok kontrolera & generalnie jest sprzężony w działaniach.

Sprawia, że ​​test jednostki jest trudniejszy i trudno jest mu się posłużyć Single Responsibility Principle.

Znalazłem a really nice Android architecture presented here, może to być pomysł. Wszystko jest luźno powiązane, o wiele łatwiejsze do przetestowania i edycji.

Oczywiście, jestem pewien, że istnieje wiele innych możliwości (jak wzorzec MVP (Model View Presenter) - i here are answers talking about MVP in Android), ale należy jeszcze spojrzeć na niego.

+0

"Android" chce "podążać za wzorcem MVC", jak to możliwe? –

15

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.

0

Oto dedykowany projekt dla Android Architecture blueprints z dobrze udokumentowanymi kodami źródłowymi. Wszystkie opierają się na wzorze MVP z kilkoma zwrotami akcji. Sprawdź także comparison różnych rozwiązań opartych na liniach kodu, testowalności, kosztach uczenia się, ich obsłudze dla zwiększenia złożoności danych. Zależy od specjalnie opracowanej aplikacji i kontekstu (czas wejścia na rynek, deweloperzy, plany na przyszłość itp.), Który najlepiej pasuje do planu.

Powiązane problemy