Arsitetur MVVM - Login Aplikasi
Nama : Rafaela Shyra Ashma' Ramadhani
NRP : 5025231217
Kelas : Pemrograman Perangkat Bergerak - B
Tugas Arsitektur MVVM - Login Aplikasi
Source Code: GitHub
Hasil Aplikasi:
Penjelasan:
Aplikasi ini adalah aplikasi login sederhana yang dibangun menggunakan arsitektur MVVM (Model-View-ViewModel) dengan Room Database sebagai penyimpanan data lokal. Tujuannya supaya kode lebih terstruktur, mudah di-maintain, dan UI bisa reaktif terhadap perubahan data.
User.kt — Entity / Model
File ini adalah representasi tabel database. Anotasi
@Entity memberitahu Room untuk membuat tabel bernama "users" di SQLite, dengan kolom id, username, dan password. @PrimaryKey(autoGenerate = true) membuat id terisi otomatis setiap kali ada data baru yang dimasukkan.UserDao.kt — Data Access Object
DAO adalah interface yang berisi operasi-operasi ke database. Ada dua fungsi di sini:
insert() untuk menyimpan data user baru, dan login() yang menjalankan query SQL untuk mencari user berdasarkan username dan password. Keduanya pakai keyword suspend supaya berjalan secara asinkron menggunakan Kotlin Coroutine, jadi tidak memblokir UI thread.AppDatabase.kt — Database
Ini adalah kelas utama Room yang menghubungkan entity dan DAO. Menerapkan Singleton Pattern lewat blok
companion object supaya hanya ada satu instance database selama aplikasi berjalan, tidak boros resource. @Volatile dan synchronized dipakai supaya aman diakses dari banyak thread sekaligus.UserRepository.kt — Repository
Repository bertugas sebagai perantara antara ViewModel dan DAO. ViewModel tidak langsung mengakses DAO, melainkan melalui Repository. Ini membuat kode lebih rapi dan kalau suatu saat sumber datanya diganti (misalnya dari API), cukup ubah di Repository saja tanpa perlu menyentuh ViewModel.
LoginViewModel.kt — ViewModel
ViewModel menyimpan state UI dan menjalankan logika login.
loginstate menggunakan mutableStateOf dari Jetpack Compose, artinya setiap kali nilainya berubah, UI akan otomatis ikut berubah (reactive UI). Fungsi login() dipanggil pakai viewModelScope.launch supaya operasi database berjalan di coroutine tanpa mengganggu main thread. Ada juga insertDummyUser() untuk memasukkan akun default admin/12345 ke database.LoginViewModelFactory.kt — ViewModel Factory
Karena LoginViewModel butuh parameter (repository) saat dibuat, maka perlu Factory ini. ViewModelProvider tidak bisa membuat ViewModel berparameter secara langsung, jadi Factory yang menangani pembuatannya dengan menyuntikkan repository yang dibutuhkan.
LoginScreen.kt — View / UI
Ini adalah tampilan loginnya, dibuat dengan Jetpack Compose. State username, password, dan toggle visibility disimpan dengan
remember { mutableStateOf() } sebagai state lokal UI. Ketika tombol Login ditekan, fungsi viewModel.login() dipanggil, lalu hasilnya ditampilkan lewat Text(loginState) yang otomatis berubah karena loginstate di ViewModel bersifat reaktif.MainActivity.kt — Entry Point
Di sini semua komponen dirakit: database dibuat, lalu repository, lalu factory, lalu ViewModel.
LaunchedEffect(Unit) dipakai supaya insertDummyUser() hanya dipanggil sekali saat aplikasi pertama dibuka, bukan setiap kali UI di-recompose.Secara keseluruhan, alur datanya mengikuti pola MVVM: UI memanggil ViewModel → ViewModel memanggil Repository → Repository memanggil DAO → DAO mengakses Room/SQLite. Hasilnya dikembalikan ke ViewModel, lalu state berubah, dan UI otomatis ikut update.
Komentar
Posting Komentar