I Prefix dan Impl Suffix
1. Konvensi Penamaan Interface dan Implementasi
Pola umum:
Beberapa developer menggunakan
I
prefix untuk interface (contoh:ITaxCalculator
).Beberapa menggunakan
Impl
suffix untuk implementasi (contoh:TaxCalculatorImpl
).
Masalah dengan konvensi ini:
Redundan:
I
atauImpl
tidak menambah kejelasan karena bahasa pemrograman sudah membedakan interface dan implementasi.Tidak longgar terhubung (loosely coupled): Perubahan di interface mengharuskan perubahan di implementasi.
2. Kelebihan dan Kekurangan Penggunaan Interface untuk Semua Implementasi
Kelebihan:
Memudahkan mocking dan penggantian implementasi saat testing.
Berguna di bahasa statically typed (Java, Go) di mana substitusi objek tidak mudah.
Kekurangan:
Over-engineering: Tidak semua komponen memerlukan interface jika hanya punya satu implementasi.
Kode test jadi rumit: Mock berlebihan membuat test sulit dipelihara.
3. Masalah dalam Pendekatan Testing yang Kurang Baik
Testing dianggap "second-class citizen":
Developer sering fokus ke implementasi dulu, baru memikirkan testing belakangan.
Akibatnya, dibuat banyak interface hanya untuk mempermudah mocking, bukan karena kebutuhan desain.
Mocking yang berlebihan:
Mock sebaiknya hanya digunakan untuk:
Kode yang terlalu kompleks/lambat untuk di-test.
Operasi IO/network yang tidak stabil atau sulit direproduksi.
Terlalu banyak mock membuat test rapuh (perubahan logika mengharuskan update semua mock).
4. Solusi yang Lebih Baik
Isolasi kode yang sulit di-test:
Pisahkan logika bisnis (deterministik) dari operasi IO (network, file, system call).
Kode non-IO lebih mudah di-test karena perilakunya dapat diprediksi.
Hindari interface yang tidak diperlukan:
Jika hanya ada satu implementasi, pertimbangkan untuk tidak membuat interface.
Gunakan interface hanya jika benar-benar dibutuhkan (misal: untuk dependency injection atau polymorphism).
5. Filosofi Pengembangan Software yang Lebih Baik
Software development adalah proses iteratif:
Awalnya boleh menggunakan
I
/Impl
jika belum ada solusi lebih baik.Seiring waktu, perbaiki struktur kode (gabung atau pecah komponen sesuai kebutuhan).
Kode yang baik terus diperbaiki:
Setiap engineer menulis kode "jelek" di awal, tapi engineer yang baik terus melakukan refactor.
Kesimpulan
Hindari
I
prefix danImpl
suffix kecuali benar-benar diperlukan.Jangan buat interface untuk semua hal—gunakan hanya saat ada multiple implementations atau kebutuhan testing yang spesifik.
Fokus pada testing yang efektif:
Minimalkan mocking, isolasi kode IO, dan prioritaskan test pada logika bisnis.
Terus perbaiki kode:
Desain ulang komponen seiring berkembangnya sistem.
Dengan pendekatan ini, kode menjadi lebih bersih, mudah dipelihara, dan siap untuk pengembangan jangka panjang.
Last updated