Yudi Karma
3 min readOct 24, 2019

Android MVVM with Jetpack Component And Dagger2

Photo by Serge Kutuzov on Unsplash

Masih ingat beberapa waktu yang lalu saya menulis tentang pengalaman mengikuti Kelas MADE Dicoding melalui beasiswa Google Developer Kejar 2019 ??

kali in saya ingin membagikan source code dari submission yang saya selesaikan dimana pada project ini saya telah menerapkan structure MVVM didalam nya dan beberapa komponen android jetpack yang saya butuhkan seperti workmanager, room, navigation dan lain-lain

tetapi sayangnya pada project ini saya belum menerapkan data binding yang seharusnya menjadi ciri khas dari design patern MVVM.

oleh karena itu diharapkan ini menjadi chalenge buat para pembaca untuk menerapkan Data Binding dan Unit Testing. jika telah selesai dan berjalan dengan benar, feel free to Send Pull Request to my Github Repository

MVVM Structure

Struktur diatas adalah Struktur dari project yang menerapkan design patern MVVM dalam membangun aplikasi android.

MVVM:

adalah design patern yang memisahkan antara bagian view dengan logic bisnisnya dan yang menghubungkan mereka hanya melalui viewmodel

Model - adalah tempat dimana businis logic berada , data class atau entity atau POJO berada baik data class local maupun data class remote dan repository. Repository: menjadi pintu berkomunikasi dengan sumber data lokal (local database, prefrence) atau Remote (API) sesuai dengan permintaan dari ViewModel.

View - hanya tempat dimana user berinteraksi contohnya layout.XML, tidak ada bisnis logik didalamnya. action yang di terima dari view akan diteruskan kepada viewmodel dan menerima response melalui observe live data dari viewmodel.

ViewModel- tempat dimana bisnis logic berada contoh: request API,operator matematika dll. dan menghandle action dari view dan memberikan response melalui observe live data sehingga ketika ada perubahan data baru maka otomatis akan langsung di trigger oleh view

Kelebihan :

  • Tidak ada keterikatan antara view dan model
  • tidak membutuhkan interface untuk menghubungkan view dengan model (cara MVP)
  • mudah untuk melakukan unit testing dll

Kekurangan

  • kamu harus membuat setiap view untuk melakukan observe terhadap live data
  • ukuran kode menjadi lebih besar

Dari stuctur diatas dapat kita pahami :

  1. UI (activity/fragment) akan meminta data pada Repository melalui ViewModel

mengapa demikian ?

Karena Lifecyle dari Viewmodel itu sendiri adalah Tidak Didestroy sampai activity itu di destroy.

sehingga Data yang disimpan pada ViewModel dapat terus digunakan meskipun activity di Rotate dll.

src : MindOrks.com

2. Repository akan memberikan data sesuai dengan yang diminta oleh ViewModel jika data yang diminta berasal dari server, maka repository akan memanggil fungsi untuk melakukan Request API dan response yang didapatkan akan diteruskan kepada ViewModel untuk selanjutnya di berikan kepada UI (Activity/fragment)

3. diantara Server(API) dan Repository terdapat Model yang berfungsi untuk melakukan parsing dari json kedalam DataClass atau model.

untuk dapat mengerti lebih lanjut silahkan check Sample Project ini yang telah menerapkan Structure MVVM lengkap dengan Depedency Injection Didalamnya..