Nama memiliki kesempatan untuk menyampaikan makna. Mengapa Anda membuang kesempatan itu dengan Impl?
Pertama-tama, jika Anda hanya akan memiliki satu implementasi, hapus antarmuka. Itu menciptakan masalah penamaan ini dan tidak menambahkan apa pun. Lebih buruk lagi, ini dapat menyebabkan masalah dengan tanda tangan metode yang tidak konsisten dalam API jika Anda dan semua pengembang lainnya tidak berhati-hati untuk selalu hanya menggunakan antarmuka.
Karena itu, kita dapat mengasumsikan bahwa setiap antarmuka memiliki atau mungkin memiliki dua atau lebih implementasi.
Jika Anda hanya memiliki satu sekarang, dan Anda tidak tahu apa perbedaannya, Default adalah awal yang baik.
Jika Anda memiliki dua sekarang, beri nama masing-masing sesuai dengan tujuannya.
Contoh: Baru-baru ini, kami memiliki Konteks kelas yang konkret (mengacu pada database). Disadari bahwa kami harus dapat mewakili konteks yang sedang luring, sehingga nama Konteks digunakan untuk antarmuka baru (untuk mempertahankan kompatibilitas untuk API lama), dan implementasi baru dibuat, OfflineContext . Tapi coba tebak apa yang aslinya diganti namanya? Itu benar, ContextImpl ( ya ).
Dalam hal ini, DefaultContext mungkin akan baik-baik saja, dan orang-orang akan mendapatkannya, tetapi tidak deskriptif seperti yang seharusnya. Lagi pula, jika tidak offline , apakah itu? Jadi kami pergi dengan: OnlineContext .
Kasus khusus: Menggunakan awalan "I" pada antarmuka
Salah satu jawaban lain yang disarankan menggunakan awalan I pada antarmuka. Lebih disukai, Anda tidak perlu melakukan ini.
Namun, jika Anda membutuhkan kedua antarmuka, untuk implementasi kustom, tetapi Anda juga memiliki implementasi konkret primer yang akan sering digunakan, dan nama dasar untuk itu terlalu sederhana untuk menyerah pada antarmuka saja, maka Anda dapat mempertimbangkan untuk menambahkan "Saya" ke antarmuka (meskipun, itu baik-baik saja jika itu masih tidak cocok untuk Anda dan tim Anda).
Contoh: Banyak objek bisa menjadi "EventDispatcher". Demi API, ini harus sesuai dengan antarmuka. Tapi, Anda juga ingin memberikan dispatcher acara dasar untuk delegasi. DefaultEventDispatcher akan baik-baik saja, tetapi agak lama, dan jika Anda akan sering melihat nama itu, Anda mungkin lebih suka menggunakan nama dasar EventDispatcher untuk kelas beton, dan mengimplementasikan IEventDispatcher untuk implementasi kustom:
/* Option 1, traditional verbose naming: */
interface EventDispatcher { /* interface for all event dispatchers */ }
class DefaultEventDispatcher implements EventDispatcher {
/* default event dispatcher */
}
/* Option 2, "I" abbreviation because "EventDispatcher" will be a common default: */
interface IEventDispatcher { /* interface for all event dispatchers */ }
class EventDispatcher implements IEventDispatcher {
/* default event dispatcher. */
}