MVP w Androidzie - Model

Kliknij i wspomóż mnie :)

Android

Wstęp

Model odzwierciedla najbardziej backendową stronę architektury MVP. To tutaj zawarte są połączenia do baz danych, logika biznesowa czy obiekty POJO.

Nie znasz MVP, albo nie widzisz różnicy pomiędzy MVP a MVC. Nie szkodzi ja też do niedawna nie widziałem. Więcej możesz poczytać tutaj:

MVC vs. MVP vs. MVVM on Android

Kod zaprezentowany w tym poście jest częścią mojej przykładowej aplikacji. Jej źródło znajdziesz tutaj:

MVPWithFirebase

Pierwszą część o View znajdziesz tutaj:

MVP w Androidzie - View

Podstawowa jednostka

Moment od którego powinniśmy zacząć budowanie logicznej strony są entities (jednostki).

Enkapsulują one dane i są obiektami, z których chcemy finalnie wyciągać dane. W kotlinie dla przykładu użyjemy data class.

Data class

Takie obiekty pozwolą także na rzutowanie danych z Firebase.

Źródła danych

Kolejną zaletą architektury MVP jest to, że możemy szybko wybrać lub edytować źródło danych bez konieczności zmiany kodu w widokach.

W sytuacji kiedy użytkownik nie będzie miał dostępu do internetu aplikacja wybierze lokalną bazę danych.

  • RemoteDataSource - dane pobierane są z Firebase i jednocześnie aktualizowane w lokalnej bazie
  • LocalDataSource - zrzuty danych przekształcane są za pomocą GSON'a i zapisywane lokalnie

Interfejs dostępu do danych

Bez względu czy dane będą z Firebase czy z bazy lokalnej, to zawsze chcemy obsłużyć 3 przypadki:

  • onSuccess - OK, czyli zwracamy dane
  • onFailure - Błąd, sprawdzamy wyjątek
  • onNetworkFailure - Brak sieci. Zmieniamy źródło danych

I to prowadzi nas do wniosku, że dobrze by było mieć interfejs, który będzie implementować jakiekolwiek źródło danych.

Oczywiście przyda się także funkcja, którą poprosimy o dane z prezentera. Jest nią  getTopics, gdzie ref określa konkretną gałąź w Firebase.

RemoteDataSource

Teraz przedstawię pobieranie danych z Firebase

Linijka 11 i 12 to połączenie do bazy i lista obiektów, następnie addValueEventListener poprzez onDataChange przekazuje nam na raz wszystkie dane zgodne z ref.

Iterując po dzieciach tworzymy jednostki Topic i na sam koniec za pomocą GetTopicsCallback przekazujemy dane.

Nieco więcej o Firebase piszę tutaj:

Firebase + Kotlin - bazy danych w Android

LocalDataSource

Pozostaje jeszcze kwestia lokalnej bazy danych

Krótko mówiąc klasa znów zwraca nam obiekty z tą różnicą, że posiada dodatkowo metody do zapisu i odczytu z pamięci urządzenia.

Dokładniej zapis i odczyt realizowany jest przy pomocy GSON oraz SharedPreferences.

GsonHelper
SharedPrefsHelper

Zakończenie

W ostatniej części skupię się na opisaniu Presenter oraz wytłumaczeniu schematu komunikacji pomiędzy elementami architektury.

Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊

O mnie

Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.

Zobacz więcej

Najnowsze posty

Kliknij i wspomóż mnie :)

Zostańmy w kontakcie

* Wymagane
Kliknij i wspomóż mnie :)
shop
Otwórz Sklep Play

Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.