adalah sebuah pola arsitektur yang memisahkan antara user interface logic dari business logic. Tujuan penggunaan MVVM sendiri adalah menjaga kode UI agar tetap sederhana dan tanpa mengandung app logic agar mudah untuk dikelola. • Model Model adalah representasi dari data dan business logic dari aplikasi. Salah satu dari strategi implementasi model adalah membuat model dapat terbuka melalui observables agar terpisah antara ViewModel atau observer/ consumer. • ViewModel ViewModel berinteraksi dengan model dan juga menyiapkan observables yang akan diobservasi oleh View. ViewModel dapat menyediakan hooks untuk view dan mem-pass events kepada model. Salah satu implementasi strategi dari ViewModel adalah untuk memisahkannya dengan View. Contohnya ViewModel tidak seharusnya mengetahui View berinteraksi dengan siapa • View Tugas dari view pada MVVM adalah untuk observe sebuah ViewModel observable untuk mendapatkan data yang akan mengupdate UI/ tampilan. • Model • Model / entity adalah representasi dari data yang digunakan pada business logic, dapat berupa Plain Old Java Object (POJO), Kotlin Data Classes, dll. • View • Representasi UI dari sebuah aplikasi, pada Android sendiri view ini dapat berupa Activity atau Fragment. • ViewModel • Layer yang berinteraksi langsung dengan Model, serta menyajikan data untuk View layer. Kesimpulan Tujuan view model • Adalah sebuah class yang di gunakan utk memenage UI dan data yang berhubungan dengan UI • Agar data itu dapat di maksimalkan penggunaanya, jika dalam kondisi tertentu terjadi rotasi layar tapi data tetap di pertahankan mvvm diagram android Dari Google Retrofit Resource yang berbentuk format JSON yang disediakan REST server dapat dimanfaatkan oleh aplikasi android dengan library Retrofit. Retrofit adalah library Rest Client untuk android dan java dari squareup. hal ini membuatnya relatif mudah untuk mengambil dan mengunggah JSON (atau struktur data lainnya) melalui webservice berbasis REST. Di Retrofit Anda mengonfigurasi konverter mana yang digunakan untuk serialisasi data. Biasanya untuk JSON menggunakan GSon, tetapi Anda dapat menambahkan konverter khusus untuk memproses XML atau protokol lain. • Retrofit dapat dikonfigurasi untuk menggunakan converter. Converter ini menangani de(serialization) data. Beberapa converter sudah tersedia untuk berbagai format serialisasinya. • secara default, Retrofit hanya dapat melakukan deserialize badan HTTP ke dalam tipe ResponseBody OkHttp dan hanya dapat menerima tipe RequestBody untuk @Body. Tambahkan library ini di build.gradle Penggunaan Live Data dan Mutable Live Data Kedua class tersebut memiliki tujuan yang sama yaitu class observable yang mana class tersebut berfungsi untuk mengamati perubahan value pada class lain Perbedaan nya • adalah Live Data bersifat Immutable yang mana value nya itu bersifat constant atau value tersebut tidak dapat diubah, serta Mutable Live Data bersifat Mutable yang memungkinkan valuenya itu bisa diubah. • Mutable Live data digunakan didalam ViewModel bertujuan untuk mengantisipasi perubahan logika dari Repository, artinya Mutable Live Data ini mengamati perubahan value dari class repository secara dinamis
Mutable Live data dan Live data
• Jadi kesimpulannya memiliki fungsi yang sama yaitu class yang bertugas untuk melakukan Observable atau mengamati perubahan value pada class lain. Bedanya Mutable Live data bersifat dinamis yang valuenya dapat berubah serta Live data bersifat statis yang valuenya tidak bisa berubah ViewModelProvider
adalah kelas helper yang membungkus
beberapa fungsi/method untuk life-cycle viewmodel. Salah satunya adalah fungsi viewModel.onCleared() life-cycle viewmodel Dependency Injection • adalah suatu teknik untuk mengurangi ketergantungan (interdependency) dari suatu sistem, untuk meminimalisir suatu class agar tidak terikat dengan class lain
• Dependency Injection berfungsi untuk mengatur cara suatu objek
dibentuk ketika ada objek lain membutuhkannya. • Ada tiga komponen utama yang di gunakan pada Dependency Injection, yaitu : • Injector, merupakan komponen yang mengatur pembuatan instance (salinan) dari Service dan melakukan injeksi ke Client. • Service, merupakan suatu Objek atau komponen yang melakukan tugas tertentu, dan dapat di gunakan oleh Client. • Client, merupakan suatu Objek atau komponen yang memiliki ketergantungan terhadap objek Service dalam mengerjakan tugasnya. Untuk menggunakan DI kita bisa pakai koin Tambahkan di build.gradle anda Buat Struktur package sebagai berikut Buat Package Buat file baru di Repository beri nama AppRepository Buat Class baru di local beri nama LocalDataSource Buat class baru di remote Script AppRepositoty Untuk menghubungkan antara repository dengan localDatasource dan RemoteDataSource Tambahkan packae Network di remote Isi network dengan ApiConfig dan ApiService
Untuk Script ApiConfig dan Apiservice anda copykan saja
Tambahkan file AppModule di DI Tambahkan 3 buah file di DI