👨‍💻
Sammi
  • Hello
  • About Me
    • Links
    • My Daily Uses
  • PostgreSQL → Partitioning
  • Belajar System Programming Menggunakan Go
    • Mengingat Kembali Tentang Concurrency dan Parallelism
  • Memory Management
  • Explore
    • Testing 1: Load and performance testing
    • Data Structure 1: Bloom Filter
    • System Design 1: Back of The Envelope Estimation
    • System Design 2: A Framework For System Design Interviews
    • System Design 3: Design a URL Shortener
    • Belajar RabbitMQ
  • Belajar Kubernetes
  • Notes
    • Permasalahan Penggunaan JWT dan Solusinya dengan PASETO
    • First Principle Thinking
    • The Over-Engineering Pendulum
    • Data-Oriented Programming
  • CAP Theorem
  • Go Series: Safer Enum
  • Go Series: Different types of for loops in Golang?
  • Go Series: Mutex & RWMutex
  • Setup VM Production Ready Best Practice
  • BEHAVIOUR QUESTION
  • Invert, always invert
  • Mengapa Tidak Menggunakan Auto-Increment ID?
  • I Prefix dan Impl Suffix
  • ACID
  • MVCC Di Postgres
  • Implicit Interface di Go
  • Transaction di Postgres
  • Kriteria Kolom yang Cocok Dijadikan Index
  • Misc
    • Go Project
    • Talks
    • Medium Articles
  • PostgreSQL
    • Introduction
  • English
    • Vocab
Powered by GitBook
On this page

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 atau Impl 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:

      1. Kode yang terlalu kompleks/lambat untuk di-test.

      2. 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 dan Impl 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.

PreviousMengapa Tidak Menggunakan Auto-Increment ID?NextACID

Last updated 13 days ago