İsimlerin anlam ifade etme şansı var. Bu fırsatı neden Impl ile birlikte atıyorsun?
Her şeyden önce, yalnızca tek bir uygulamanız olacaksa, arayüzü ortadan kaldırın. Bu adlandırma problemini yaratır ve hiçbir şey eklemez. Daha da kötüsü, siz ve diğer tüm geliştiriciler her zaman yalnızca arayüzü kullanmak için dikkatli değilseniz API'lerde tutarsız yöntem imzalarıyla sorunlara neden olabilir.
Bundan dolayı, her arayüzün iki veya daha fazla uygulaması olduğunu veya olabileceğini varsayabiliriz .
Şu an sadece bir tanesine sahipseniz ve diğerinin ne şekilde farklı olabileceğini bilmiyorsanız, Varsayılan iyi bir başlangıçtır.
Şu anda iki tane varsa, her birini amacına göre adlandırın.
Örnek: Son zamanlarda, bir somut sınıf Context (veritabanına referansla) yaptık . Çevrimdışı olan bir içeriği temsil etmemiz gerektiğinin farkına varılmıştı, bu yüzden Context adı yeni bir arayüz için kullanıldı (eski API'ler için uyumluluğu korumak için) ve yeni bir uygulama oluşturuldu, OfflineContext . Bil bakalım asıl adı neydi? Bu doğru, ContextImpl (yikes).
Bu durumda, DefaultContext muhtemelen iyi olur ve insanlar bunu alırdı, ancak olabileceği kadar açıklayıcı değil. Sonuçta, çevrimdışı değilse , nedir? Böylece gittik: OnlineContext .
Özel durum: Arabirimlerde "I" ön ekini kullanma
Arayüzlerde I öneki kullanılarak önerilen diğer cevaplardan biri . Tercihen, bunu yapmanız gerekmez .
Bununla birlikte, özel uygulamalar için her iki arayüze de ihtiyacınız varsa, ancak sık sık kullanılacak olan bir birincil somut uygulamanız da var ve bunun için temel ad sadece bir arayüze vermek için çok basit, o zaman eklemeyi düşünebilirsiniz. Arayüze "ben" (yine de, senin ve takımın için hala doğru oturmuyorsa, sorun değil).
Örnek: Birçok nesne bir "EventDispatcher" olabilir. API'lerin iyiliği için bunun bir arayüze uyması gerekir. Ancak, ayrıca temsilcilik için temel bir olay memuru da sağlamak istersiniz . DefaultEventDispatcher iyi olurdu, ama uzun biraz, ve sık sık onun adını göreceğiz eğer, sen olabilir taban adı kullanmayı tercih EventDispatcher'ı beton sınıfı için ve uygulamak IEventDispatcher özel uygulamalara ilişkin:
/* 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. */
}