Alat Desain yang Dibutuhkan Pengembang Junior Saat Memikirkan Lebih dari Sekadar CRUD
Setelah fitur CRUD selesai, akan tiba saatnya Anda merasa takut melakukan pemeliharaan. Kebiasaan memulai dengan desain tabel justru membuat sistem menjadi rumit. Tulisan ini berisi metodologi konkret untuk memisahkan kode berdasarkan unit domain dan menstandarkan lingkungan guna mempersempit cakupan modifikasi.
Meningkatkan Kohesi Kode: Memisahkan Akses Data dan Logika
Jika logika bisnis tercampur dalam pengontrol, Anda harus merombak kode setiap kali struktur basis data berubah. Terapkan arsitektur berlapis (layered architecture) untuk mengisolasi keduanya. Anda dapat mengurangi waktu pemeliharaan basis kode sekitar 40%.
Langkah-langkah untuk memisahkan akses data dan logika adalah sebagai berikut:
- Pindahkan kode validasi dari pengontrol ke DTO permintaan dan gunakan anotasi validasi.
- Kumpulkan logika yang tersebar di skrip transaksi ke dalam metode internal entitas domain.
- Deklarasikan antarmuka yang mendefinisikan perilaku persistensi, bukan menggunakan driver DB spesifik, guna memisahkannya dari lapisan domain.
Bahkan jika skema tabel tertentu berubah, aturan inti tetap terjaga.
Membuat Lingkungan Pengujian dengan Injeksi Dependensi
Jika Anda membuat objek secara langsung menggunakan operator new di dalam kelas, pengujian unit tidak akan mungkin dilakukan. Wujudkan Inversi Kendali (Inversion of Control - IoC) untuk melakukan pengujian independen dengan objek tiruan (Mock) tanpa memerlukan server eksternal.
Berikut adalah prosedur praktis untuk meningkatkan efisiensi pengujian:
- Deklarasikan kolaborator yang digunakan objek sebagai antarmuka, bukan kelas konkret.
- Konfigurasikan kontainer eksternal untuk menyuntikkan implementasi yang tepat pada saat dijalankan (runtime).
- Gunakan alat seperti @automock/jest untuk mengotomatiskan konfigurasi test double.
Dengan menggunakan struktur ini, Anda dapat meningkatkan kecepatan eksekusi tes lebih dari 20%.
Mengisolasi Entitas dan DTO
Memetakan struktur UI dan tabel DB secara satu-lawan-satu akan mengharuskan Anda mengubah skema DB setiap kali memperbaiki satu layar. Pisahkan secara ketat DTO untuk pesan jaringan dan entitas domain.
Berikut adalah cara mengisolasi keduanya menggunakan mapper:
- Buat kelas mapper murni yang hanya bertugas melakukan konversi data.
- Pindahkan data hanya di dalam mapper agar tidak ada dependensi langsung antara DTO dan entitas.
- Paksa lapisan layanan untuk hanya menggunakan entitas.
Anda tidak perlu mengubah logika meskipun mengganti penyimpanan data.
Menyesuaikan Lingkungan Pengembangan dengan Docker Compose
Kolaborasi akan terhenti jika setiap pengembang memiliki lingkungan lokal yang berbeda. Tulis infrastruktur sebagai kode dengan Docker Compose untuk menyinkronkan lingkungan.
Prosedur untuk membuat lingkungan standar adalah:
- Tulis versi server DB dan cache, serta variabel lingkungan dalam berkas
docker-compose.yml.
- Letakkan SQL skema awal di jalur
/docker-entrypoint-initdb.d dengan volume mount.
- Gunakan package linker seperti pnpm Workspaces untuk mencegah kekusutan dependensi.
Setelah konfigurasi ini selesai, Anda dapat menjalankan infrastruktur standar dalam waktu 3 detik tanpa perlu memusingkan pengaturan mesin lokal.
Pemodelan Domain Sebelum Desain Tabel
Jika Anda menggambar ERD terlebih dahulu, yang akan muncul hanyalah logika terfragmentasi yang berorientasi pada data. Shopify telah mengubah lebih dari 800 insinyur dari sistem lama yang berpusat pada skema fisik menjadi pemodelan yang berpusat pada objek bisnis.
Langkah-langkah untuk memulai pemodelan domain adalah:
- Daftarkan kata benda dan kata kerja utama dalam domain berdasarkan kasus penggunaan (use case) dan bahasa yang lazim (ubiquitous language).
- Definisikan entitas yang memerlukan transisi status dan objek nilai (value object) yang memiliki atribut kekal.
- Tetapkan aggregate root untuk memverifikasi integritas bisnis per unit transaksi.
Pendekatan ini akan membatasi cakupan modifikasi ke dalam modul tertentu meskipun persyaratan berubah. Desain sistem yang kompleks adalah alternatif paling praktis untuk mengatasi rasa bingung.