Tugas Pertemuan 13 - Registrasi Siswa
Nama: Dewa Putu Ananda Taurean Mahesa
NRP: 5025231158
Kelas: Pemrograman Perangkat Bergerak C
1. Penjelasan Singkat Proyek
Membuat aplikasi yang dirancang untuk mengelola data siswa. Aplikasi ini menerapkan operasi dasar CRUD (Create, Read, Update, Delete) dan menyimpan data sepenuhnya secara lokal di perangkat pengguna. Fitur utama meliputi:
- Tambah siswa: Pengguna dapat memasukkan nama dan email melalui form pop-up. Sistem dilengkapi validasi dasar (kolom tidak boleh kosong dan wajib memuat simbol @)
- Menampilkan data: Daftar siswa ditampilkan secara dinamis dari database lokal
- Edit siswa: Data yang sudah ada dapat diperbarui melalui form pop-up yang secara otomatis terisi dengan data lama saat tombol edit ditekan
- Hapus siswa: Fitur penghapusan data secara permanen dari database, dengan window konfirmasi
- Penyimpanan offline: Data tetap utuh dan tersedia meskipun aplikasi ditutup secara paksa
Aplikasi dikembangkan dengan Android Studio yang memanfaatkan Jetpack Compose, arsitektur MVVM, Room database, dan SQLite.
2. Arsitektur Aplikasi
MVVM (Model-View-ViewModel) digunakan untuk memisahkan UI dan logika bisnis. Hal ini membuat kode lebih rapi, memudahkan maintenance dan pengembangan fitur lanjutan.
Room database bertindak sebagai lapisan abstraksi di atas SQLite untuk mengelola database lokal. Room memberikan keamanan dalam penulisan query dan mendukung eksekusi secara asinkron (Coroutines dan Flow).
3. Implementasi
a. Dependency
Pertama perlu setup dependensi yang akan digunakan pada file gradle, seperti KSP, Room, ViewModel Compose, dan Kotlin Coroutines.
b. Struktur Proyek
- data: Berisi fondasi penyimpanan lokal. Meliputi entity/tabel (Siswa.kt), antarmuka operasi database/DAO (SiswaDao.kt), dan inisialisasi database (AppDatabasse.kt).
- viewmodel: Berisi StudentViewModel.kt yang bertugas mengambil data dari Room melalui DAO dan menyediakannya ke UI menggunakan State Management (StateFlow), serta menangani logika bisnis.
- ui: Berisi seluruh komponen visual aplikasi, termasuk layar utama (MainScreen.kt) dan komponen baris data individu (StudentItem.kt).
c. Implementasi Lapisan Data (Data Layer)
Penyimpanan lokal diimplementasikan menggunakan Room Database dengan arsitektur tiga komponen dasar:
- Entity (Siswa.kt): Merepresentasikan tabel siswa di dalam database SQLite. Atribut id diatur sebagai @PrimaryKey(autoGenerate = true) agar sistem memberikan ID unik secara berurutan pada setiap data baru.
- Data Access Object / DAO (SiswaDao.kt): Menggunakan anotasi @Dao untuk mendefinisikan operasi CRUD. Operasi membaca data (getAllSiswa) mengembalikan tipe Flow<List<Siswa>> agar UI dapat bereaksi secara real-time setiap kali ada perubahan data di tabel. Operasi tulis/hapus menggunakan fungsi suspend agar aman dijalankan di background thread.
- Database Instance (AppDatabase.kt): Menggunakan pola Singleton untuk memastikan hanya ada satu koneksi database yang aktif selama aplikasi berjalan, sehingga mencegah kebocoran memori (memory leak).
d. Implementasi Logika Bisnis (ViewModel Layer)
Kelas StudentViewModel.kt bertindak sebagai jembatan penghubung antara DAO dan UI:
- State Conversion: Properti siswaList menggunakan fungsi stateIn() untuk mengubah aliran data flow dari DAO menjadi StateFlow. Hal ini memungkinkan Jetpack Compose untuk mengamati (observe) data dan melakukan render ulang UI secara otomatis ketika data berubah.
- Coroutines Scope: Seluruh operasi modifikasi data (tambah, edit, hapus) dibungkus di dalam viewModelScope.launch { ... }. Ini memastikan eksekusi database tidak memblokir Main Thread (UI Thread), sehingga aplikasi tetap responsif dan tidak freeze.
e. Implementasi Lapisan Presentasi (UI Layer)
UI diimplementasikan secara deklaratif menggunakan Jetpack Compose dengan penekanan pada State Management:
- State Hoisting: Variabel input seperti nama, email dan status dialog disimpan di dalam MainScreen.kt menggunakan blok remember { mutableStateOf(...) }. Hal ini menjaga agar fungsi UI (seperti form input) tetap statis dan hanya menerima perintah dari layar utama.
- Material Design 3 Components:
- Scaffold: Menyediakan kerangka layout standar dengan dukungan FloatingActionButton.
- AlertDialog: Diimplementasikan untuk mengisolasikan form input dan konfirmasi penghapusan dari daftar utama, meningkatkan fokus pengguna.
- LazyColumn: Digunakan untuk menampilkan daftar (StudentItem.kt). Komponen ini sangat efisien karena hanya me-render item yang sedang terlihat di layar.
4. Alur Kerja CRUD
Berikut adalah alur sistem bekerja di belakang layar saat pengguna melakukan interaksi:
- Create/Update: Pengguna mengetik di AlertDialog, lalu Menekan 'Simpan', lalu UI memanggil fungsi tambahSiswa atau editSiswa di ViewModel, lalu ViewModel mengeksekusi DAO di background, lalu Room memperbarui SQLite.
- Read (Real-time): SQLite diperbarui, lalu Room secara otomatis memancarkan data terbaru melalui Flow, lalu ViewModel menerima data dan meneruskannya ke StateFlow, lalu Jetpack Compose mendeteksi perubahan state dan me-render ulang LazyColumn dengan daftar terbaru.
- Delete: Pengguna menekan tombol hapus merah, lalu AlertDialog konfirmasi muncul, lalu Pengguna menekan 'Hapus', lalu UI memanggil hapusSiswa di ViewModel, lalu Data dihapus dari SQLite, lalu Flow trigger (kembali ke siklus Read).
Comments
Post a Comment