Menurut SOLID, Anda tidak hanya harus membuat antarmuka, dan tidak hanya harus dalam file yang berbeda, tetapi juga harus dalam kumpulan yang berbeda.
Mengapa? Karena setiap perubahan pada file sumber yang dikompilasi menjadi sebuah perakitan membutuhkan kompilasi ulang dari perakitan tersebut, dan setiap perubahan pada suatu perakitan memerlukan kompilasi ulang dari setiap perakitan yang bergantung. Jadi, jika tujuan Anda, berdasarkan SOLID, adalah untuk dapat mengganti implementasi A dengan implementasi B, sedangkan kelas C bergantung pada antarmuka saya tidak harus mengetahui perbedaannya, Anda harus memastikan perakitan dengan I di dalamnya tidak berubah, sehingga melindungi penggunaan.
"Tapi itu hanya kompilasi ulang," aku mendengarmu protes. Mungkin memang begitu, tetapi di aplikasi ponsel cerdas Anda, yang lebih mudah pada bandwidth data pengguna Anda; mengunduh satu biner yang berubah, atau mengunduh biner itu dan lima lainnya dengan kode yang bergantung padanya? Tidak setiap program ditulis untuk dikonsumsi oleh komputer desktop pada LAN. Bahkan dalam kasus itu, di mana bandwidth dan memori murah, rilis patch yang lebih kecil dapat memiliki nilai karena mereka sepele untuk mendorong keluar ke seluruh LAN melalui Direktori Aktif atau lapisan manajemen domain serupa; pengguna Anda akan menunggu hanya beberapa detik untuk diterapkan pada waktu berikutnya mereka masuk, bukan beberapa menit untuk semuanya diinstal ulang. Belum lagi, semakin sedikit majelis yang harus dikompilasi ulang saat membangun proyek, semakin cepat akan dibangun,
Sekarang, penafian: Ini tidak selalu mungkin atau layak dilakukan. Cara termudah untuk melakukan ini adalah membuat proyek "antarmuka" terpusat. Ini memiliki kelemahan sendiri; kode menjadi kurang dapat digunakan kembali karena proyek antarmuka DAN proyek implementasi harus direferensikan di aplikasi lain menggunakan kembali lapisan ketekunan atau komponen kunci lainnya dari aplikasi Anda. Anda dapat mengatasi masalah itu dengan memisahkan antarmuka menjadi rakitan yang lebih erat, tetapi kemudian Anda memiliki lebih banyak proyek di aplikasi Anda yang membuat bangunan penuh sangat menyakitkan. Kuncinya adalah keseimbangan, dan mempertahankan desain yang digabungkan secara longgar; Anda biasanya dapat memindahkan file seperlunya, jadi ketika Anda melihat bahwa suatu kelas akan membutuhkan banyak perubahan, atau implementasi antarmuka yang baru diperlukan secara berkala (mungkin untuk berinteraksi dengan versi perangkat lunak lain yang baru saja didukung,