Android MVVM with Jetpack Component And Dagger2
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
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 :
- 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.
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..