Arsitektur MVVM

Nama: Stefanus Yosua Mamamoba
NRP: 5025231066
Kelas: Pemrograman Perangkat Bergerak B

Repository (GitHub)

                                                   

Struktur Repositori
Project ini memakai arsitektur sederhana berbasis MVVM:

app/src/main/java/com/example/arsitekturmvvm
|
|-- MainActivity.kt
|
|-- data
|   |-- UserRepository.kt
|   |
|   |-- local
|       |-- AppDatabase.kt
|       |-- UserDao.kt
|       |-- UserEntity.kt
|
|-- ui
|   |-- login
|   |   |-- LoginScreen.kt
|   |   |-- LoginUiState.kt
|   |   |-- LoginViewModel.kt
|   |   |-- LoginViewModelFactory.kt
|   |
|   |-- register
|       |-- RegisterScreen.kt
|       |-- RegisterUiState.kt
|       |-- RegisterViewModel.kt
|       |-- RegisterViewModelFactory.kt

Penjelasan Folder
MainActivity.kt

Sebagai entry point aplikasi. Di sini aplikasi menentukan halaman yang tampil: login atau register. MainActivity juga membuat instance database, repository, dan ViewModel.

data
Berisi layer data. Layer ini bertanggung jawab untuk mengakses dan mengelola data user.

data/local/UserEntity.kt
Model tabel database Room. File ini merepresentasikan tabel users.
@Entity(tableName = "users") data class UserEntity(...)

data/local/UserDao.kt
DAO berisi query Room, misalnya:

  • insert user
  • cek jumlah user
  • cari user berdasarkan username
  • validasi login berdasarkan username dan password


data/local/AppDatabase.kt
Konfigurasi database Room. File ini menentukan database utama aplikasi dan DAO yang digunakan.

data/UserRepository.kt
Repository menjadi penghubung antara ViewModel dan DAO. ViewModel tidak langsung memanggil Room, tetapi lewat repository. Ini membuat kode lebih rapi dan mudah dirawat.

Folder UI
ui/login
Berisi semua file untuk fitur login.

LoginScreen.kt
Tampilan halaman login menggunakan Jetpack Compose. Berisi input username, input password, tombol login, tombol pindah ke register, dan pesan sukses/gagal.

LoginUiState.kt
Menyimpan state halaman login, seperti username, password, loading, dan pesan.

LoginViewModel.kt
Berisi logic login:menerima perubahan input username/password
validasi input kosong
memanggil repository untuk cek login
mengubah state UI sesuai hasil login

LoginViewModelFactory.kt
Dipakai untuk membuat LoginViewModel yang membutuhkan parameter UserRepository.

ui/register
Berisi semua file untuk fitur registrasi.

RegisterScreen.kt
Tampilan halaman registrasi menggunakan Jetpack Compose. Berisi input username, password, konfirmasi password, tombol daftar, tombol kembali ke login, dan pesan hasil registrasi.

RegisterUiState.kt
Menyimpan state halaman registrasi.

RegisterViewModel.kt
Berisi logic registrasi:

  • validasi field kosong
  • validasi password minimal 6 karakter
  • validasi konfirmasi password
  • cek username sudah dipakai atau belum
  • menyimpan user baru ke Room Database


RegisterViewModelFactory.kt
Dipakai untuk membuat RegisterViewModel yang membutuhkan UserRepository.

Fitur Aplikasi

  • Login user
  • Registrasi user baru
  • Validasi username dan password
  • Validasi konfirmasi password
  • Menampilkan pesan sukses/gagal
  • Menyimpan data user ke Room Database
  • Menggunakan MVVM Architecture
  • Menggunakan Jetpack Compose untuk UI
  • Menggunakan Coroutine dan Flow untuk proses data reaktif


Alur Login

  1. User input username dan passwordLoginScreen mengirim data ke LoginViewModel 
  2. LoginViewModel melakukan validasi input
  3. LoginViewModel memanggil UserRepository 
  4. UserRepository memanggil UserDao 
  5. Room Database mencari user yang cocok 
  6. Hasil dikirim kembali ke ViewModel 
  7. UI menampilkan pesan login berhasil/gagal

Jika username dan password cocok dengan data di database, maka login berhasil. Jika tidak cocok, aplikasi menampilkan pesan gagal.

Alur Registrasi

  1. User input username, password, dan konfirmasi password RegisterScreen mengirim data ke RegisterViewModel 
  2. RegisterViewModel melakukan validasi 
  3. RegisterViewModel memanggil UserRepository 
  4. Repository mengecek username lewat UserDao 
  5. Jika username belum dipakai, user disimpan ke Room Database 
  6. UI menampilkan pesan registrasi berhasil
  7. Jika username sudah digunakan, aplikasi menampilkan pesan bahwa username sudah dipakai.


Alur MVVM

  • View / UI: LoginScreen.kt, RegisterScreen.kt Menampilkan UI dan menerima input user 
  • ViewModel: LoginViewModel.kt, RegisterViewModel.kt Mengatur state dan business logic 
  • Repository: UserRepository.kt Menjadi penghubung antara ViewModel dan database 
  • Model / Database: UserEntity.kt, UserDao.kt, AppDatabase.kt Menyimpan dan mengambil data dari Room


Dokumentasi

Comments

Popular posts from this blog

MyMoney Notes