Perencanaan Proyek

Menyusun daftar fitur, form, dan desain data sebelum menulis kode.

Daftar isi

Aplikasi yang ditulis dengan cermat dimulai dari rancangan yang jelas, dan topik ini menyusun rancangan untuk proyek penutup jalur, yaitu aplikasi desktop Pengelola Catatan Harian. Lingkupnya mencakup daftar fitur inti, pemetaan fitur ke form dan kontrol, desain kelas data Catatan, struktur berkas proyek, serta urutan pengerjaan yang dapat dicoba langkah demi langkah. Setelah membacanya, setiap berkas dan setiap properti yang muncul pada penerapannya memiliki alasan yang dapat ditelusuri kembali ke rancangan ini.

Fitur inti aplikasi#

Fitur inti adalah kemampuan minimum yang harus ada agar aplikasi layak digunakan, dan daftarnya ditetapkan lebih dahulu supaya pengerjaan kode memiliki sasaran yang tetap. Pengelola Catatan Harian adalah aplikasi catatan pribadi berbasis Windows Forms, sehingga kebutuhannya cukup dirangkum menjadi lima butir berikut. Setiap butir dirumuskan sebagai kemampuan yang dapat dicoba langsung, bukan sebagai nama teknologi, agar pemetaannya ke kontrol pada bagian berikutnya mudah dilakukan.

  • menambah catatan baru yang terdiri atas judul dan isi,
  • menampilkan seluruh catatan dalam satu panel daftar,
  • mengubah catatan yang dipilih dari daftar,
  • menghapus catatan yang dipilih dari daftar,
  • menyimpan seluruh catatan ke berkas JSON secara otomatis setiap kali ada perubahan.

Empat butir pertama adalah operasi data yang dikenal sebagai CRUD, yakni singkatan dari create, read, update, dan delete, yaitu tambah, baca, ubah, dan hapus. Butir terakhir mengubah hasil sementara menjadi data yang bertahan, sehingga catatan tidak hilang ketika aplikasi ditutup. Kelima butir bekerja pada satu kumpulan data yang sama, yaitu daftar catatan milik aplikasi, sehingga desain datanya cukup ditetapkan sekali untuk semua fitur.

Batas lingkup ditetapkan pada saat yang sama dengan daftar fiturnya. Kemampuan seperti pencarian catatan, pengurutan, dan penyuntingan berformat sengaja tidak dibangun karena menambah kemampuan di tengah pengerjaan merupakan penyebab yang paling sering membuat proyek kecil tidak selesai. Fitur semacam itu dibiarkan sebagai daftar latihan lanjutan di luar lingkup pengerjaan.

Pemetaan fitur ke form dan kontrol#

Aplikasi berukuran kecil cukup dilayani satu form, dan keputusan ini diambil sejak perencanaan agar struktur antarmukanya tetap sederhana. Seluruh fitur ditempatkan pada satu jendela bernama FormUtama yang memuat kotak isian, tombol aksi, panel daftar, dan satu Label kecil penunjuk jumlah catatan. Tabel berikut memetakan setiap fitur ke kontrol yang melayaninya beserta perilaku kuncinya.

FiturKontrolPerilaku kunci
menambah catatanTextBox judul, TextBox isi, Button Tambahjudul kosong ditolak, kotak isian dikosongkan setelah tersimpan
menampilkan daftarListBoxsetiap baris menampilkan [Id] Judul
mengubah catatanListBox, TextBox, Button Ubahpemilihan baris mengisi kembali kotak isian
menghapus catatanListBox, Button Hapusbaris terpilih dihapus dan kotak isian ikut dikosongkan
simpan otomatistanpa kontrol khususterjadi di lapisan logika setelah setiap operasi

Dua keputusan pada tabel tersebut perlu ditegaskan. Pertama, ListBox dipilih sebagai panel daftar karena satu catatan cukup direpresentasikan sebagai satu baris teks [Id] Judul, sedangkan isi lengkapnya dibuka kembali melalui kotak isian ketika barisnya dipilih. Kedua, simpan otomatis sengaja tidak diberi tombol karena penyimpanan yang berlangsung bersama operasi data menghilangkan risiko perubahan terakhir terlupakan ketika aplikasi ditutup secara mendadak.

Desain data kelas Catatan#

Satu kelas data bernama Catatan mewakili satu catatan yang tersimpan, dan lima propertinya ditetapkan pada tabel berikut. Kelas ini menjadi satu-satunya bentuk data yang berpindah antarlapisan, sehingga perubahan pada tabelnya memengaruhi logika dan antarmuka sekaligus. Nama propertinya dipilih pendek dan tetap, karena nama yang sama akan tampil sebagai kunci JSON pada berkas data.

PropertiTipeKegunaan
IdIntegerpenanda unik untuk mencari, mengubah, dan menghapus catatan
JudulStringjudul singkat yang tampil pada panel daftar
IsiStringisi lengkap catatan
WaktuBuatDateTimewaktu catatan pertama kali ditambahkan
WaktuUbahDateTimewaktu penyuntingan terakhir

Properti Id menuntut aturan penomoran yang jelas sejak sekarang. Nomor berikutnya diambil dari nilai Id terbesar yang ada lalu ditambah satu, sehingga nomor catatan yang sudah dihapus tidak pernah digunakan ulang. Pencarian, perubahan, dan penghapusan selalu bekerja pada Id, bukan pada Judul, karena judul boleh disunting sewaktu-waktu sedangkan penanda data harus tetap.

Kelas Catatan berisi properti saja tanpa perilaku, karena seluruh aturan penyimpanan ditempatkan pada kelas terpisah bernama PenyimpananCatatan. Pemisahan ini membuat aturan data dapat diuji tanpa antarmuka, sebagaimana diperlihatkan pada urutan pengerjaan di bagian akhir. Antarmuka nanti juga tidak pernah menyentuh berkas secara langsung, karena seluruh kebutuhan membaca dan menulis melewati lapisan logika.

Struktur berkas dan arsitektur tiga lapis#

Rancangan ini terbagi menjadi tiga lapisan yang masing-masing menangani satu tanggung jawab, dan diagram berikut memperlihatkan alurnya. FormUtama menggambar antarmuka dan memanggil metode lapisan logika, PenyimpananCatatan mengelola daftar Catatan sekaligus membaca dan menulis berkas JSON, sedangkan catatan.json menjadi wadah data yang bertahan di luar program. Pembagian ini menjaga form tetap bebas dari aturan penyimpanan, sehingga penggantian cara menyimpan kelak tidak menyentuh satu baris pun di dalam form.

FormUtamaantarmuka Windows FormsPenyimpananCatatanlapisan logikacatatan.jsonberkas JSONpanggil Tambah, Ubah, Hapuskembalikan List(Of Catatan)Serialize daftarDeserialize JSON
Arsitektur tiga lapis Pengelola Catatan Harian

Tanggung jawab ketiga lapisan itu ditempatkan pada lima berkas berikut.

text Struktur berkas proyek PengelolaCatatan
PengelolaCatatan/
├── PengelolaCatatan.vbproj
├── Catatan.vb
├── PenyimpananCatatan.vb
├── FormUtama.vb
└── UjiLogika.vb

PengelolaCatatan.vbproj mengaktifkan Windows Forms dan menetapkan opsi bahasa, Catatan.vb memuat kelas data, PenyimpananCatatan.vb memuat lapisan logika, sedangkan FormUtama.vb memuat antarmuka beserta titik masuk program. Berkas kelima, UjiLogika.vb, adalah program console untuk menguji lapisan logika tanpa membuka jendela, dan berkas ini tidak dipanggil oleh aplikasi utama. Rancangan pada topik ini menjadi cetak biru pengerjaan kode, sehingga setiap nama berkas dan properti yang tercantum di sini ditemukan kembali pada penerapannya tanpa perubahan.

Urutan pengerjaan yang dapat dicoba#

Urutan pengerjaan disusun agar setiap langkah dapat diperiksa sebelum langkah berikutnya dimulai.

  1. Tulis Catatan.vb terlebih dahulu karena berkas lain bergantung padanya.
  2. Tulis PenyimpananCatatan.vb beserta aturan validasi dan penomoran Id di dalamnya.
  3. Uji lapisan logika melalui UjiLogika.vb pada console, yaitu menambah, menelusuri, mengubah, dan menghapus catatan, lalu memeriksa isi catatan.json.
  4. Tulis FormUtama.vb dan hubungkan setiap tombol ke satu metode lapisan logika.
  5. Rakit PengelolaCatatan.vbproj, lakukan build, dan perbaiki setiap error yang dilaporkan compiler.
  6. Jalankan aplikasi di Windows dan coba kelima fitur secara berurutan.

Lapisan logika didahulukan karena dapat diuji tanpa antarmuka, sehingga kesalahan aturan data tertangkap pada tahap yang paling murah untuk diperbaiki. Pendekatan ini merupakan bentuk sederhana dari pengujian unit, yaitu kebiasaan menguji potongan kode secara terpisah sebelum potongan itu digunakan oleh antarmuka. Antarmuka disusun belakangan karena perannya hanya menjembatani masukan pengguna dengan metode yang sudah teruji.

Kesalahan umum#

Kesalahan pertama adalah daftar fitur yang membesar setelah kode mulai ditulis. Fitur tambahan seperti pencarian dan ekspor menggeser sasaran pengerjaan dan biasanya berujung pada aplikasi yang setengah jadi. Perbaikannya adalah menutup daftar fitur sejak perencanaan dan memindahkan keinginan baru ke daftar latihan lanjutan.

Kesalahan kedua adalah mendesain catatan tanpa penanda Id. Operasi ubah dan hapus menjadi sulit dibedakan sasarannya bila satu-satunya ciri catatan adalah judulnya, terutama setelah dua catatan tidak sengaja diberi judul sama. Perbaikannya adalah menetapkan properti Id beserta aturan penomorannya sebelum kode ditulis.

Kesalahan ketiga adalah menunda penyimpanan hingga aplikasi ditutup. Data yang hanya ditulis pada saat keluar hilang seluruhnya bila aplikasi berhenti secara mendadak. Perbaikannya adalah menjadikan penyimpanan bagian dari setiap operasi data, sesuai fitur simpan otomatis pada rancangan ini.

Ringkasan#

  • Pengelola Catatan Harian dibangun dengan lima fitur inti, yaitu tambah, tampil, ubah, hapus, dan simpan otomatis ke JSON, sedangkan fitur lain dikeluarkan dari lingkup pengerjaan.
  • Seluruh fitur dilayani satu form bernama FormUtama dengan TextBox untuk isian, ListBox sebagai panel daftar, dan tiga tombol aksi.
  • Kelas Catatan memuat lima properti, yaitu Id, Judul, Isi, WaktuBuat, dan WaktuUbah, dengan Id bernomor berurutan sebagai penanda utama data.
  • Pengerjaan dimulai dari kelas data dan lapisan logika yang diuji lewat console, kemudian antarmuka, dan diakhiri build serta uji coba fitur di Windows.

Referensi#