Interface on the Producer Side

1. Definisi Producer vs Consumer Side

  • Producer side: Interface didefinisikan di package yang sama dengan implementasi konkret

  • Consumer side: Interface didefinisikan di package eksternal dimana interface tersebut digunakan

2. Kesalahan Umum

  • Developer sering membuat interface di producer side (kebiasaan dari Java/C#)

  • Ini memaksakan abstraksi yang mungkin tidak diperlukan oleh client

3. Prinsip yang Benar

  • "Abstractions should be discovered, not created"

  • Biarkan client yang menentukan kebutuhan abstraksinya

  • Producer hanya menyediakan implementasi konkret

4. Keuntungan Interface di Consumer Side

  • Client bisa membuat interface yang spesifik sesuai kebutuhannya

  • Mengikuti Interface Segregation Principle (SOLID)

  • Interface bisa dibuat unexported jika hanya digunakan internal

  • Tidak ada circular dependency

5. Pengecualian

  • Standard library seperti encoding package memang mendefinisikan interface di producer side

  • Hanya lakukan ini jika benar-benar yakin abstraksi akan berguna untuk banyak client

6. Returning Interfaces

  • Hindari mengembalikan interface dari fungsi

  • Kembalikan struct konkret, terima interface sebagai parameter

  • Pengecualian: error interface dan beberapa case di standard library

Contoh Kode

Salah - Interface di Producer Side

Benar - Interface di Consumer Side

Consumer Mendefinisikan Interface Sesuai Kebutuhan

Penerapan Postel's Law dalam Go

Best Practices

  1. Start with concrete implementations - Jangan mulai dengan interface

  2. Let clients discover interfaces - Biarkan client yang menentukan abstraksi

  3. Keep interfaces small - Interface seharusnya spesifik dan minimalis

  4. Return structs, accept interfaces - Pola umum yang baik

  5. Use unexported interfaces - Untuk kebutuhan internal client

Pengecualian yang Valid

Kesimpulan: Jangan paksakan interface di producer side kecuali Anda benar-benar yakin abstraksi tersebut akan berguna untuk banyak client dan sudah terbukti kebutuhan nyatanya.

Last updated