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
encodingpackage memang mendefinisikan interface di producer sideHanya 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:
errorinterface 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
Start with concrete implementations - Jangan mulai dengan interface
Let clients discover interfaces - Biarkan client yang menentukan abstraksi
Keep interfaces small - Interface seharusnya spesifik dan minimalis
Return structs, accept interfaces - Pola umum yang baik
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