Kısa süre önce Google Guice'de sunulan @ImplementedBy
ek açıklamaları okudum . Programlayıcının, bağımlılık enjeksiyonunda ileride kullanmak üzere bir arayüz ve uygulaması arasında bir bağ belirlemesini sağlar. Tam zamanında bağlama örneğidir .
Aşağıdaki sözdizimini kullanarak, modüllerimdeki açık bağlantıları tanımlamaya alışkınım:
bind(SomeInterface.class).to(SomeInterfaceImplementation.class);
Belgelere göre, bu, @ImplementedBy
ek açıklamanın aşağıdaki kullanımına eşdeğerdir :
@ImplementedBy(SomeInterfaceImplementation.class)
public interface SomeInterface {
//method declarations
}
Burada görebildiğim tek kazanç, kodun biraz daha kısa olması. Aynı zamanda, bu yaklaşımın aynı dokümanlar tarafından doğru bir şekilde işaret edilen bir dezavantajı vardır:
@ImplementedBy
Dikkatli kullanın ; arayüzden uygulamaya derleme zamanı bağımlılığı ekler.
Böyle bir bağımlılık birçok durumda bir sorun olmayabilir ama ben şahsen bir kod kokusu olarak görüyorum.
Hangi kullanım durumları @ImplementedBy
ek açıklamayı kullanmaya değer kılar ?
Olası bir yol, onu bir kütüphane veya çerçeve kodunda kullanmak gibi görünmektedir. Dokümanlarda açıklandığı gibi ek açıklama, açık bir şekilde kolayca geçersiz kılınabilen varsayılan bir bağlama sağlayabilir .
Bir tür hem bir
bind()
ifadede (ilk argüman olarak) hem de@ImplementedBy
ek açıklama içeriyorsa,bind()
ifade kullanılır. Ek açıklama, bir bağlayıcıyla geçersiz kılınabilen varsayılan bir uygulamayı önerir .
Bu şekilde, bir kütüphanenin geliştiricisi olarak, kullanıcılara istemci kodunun herhangi bir yerinde özelleştirilebilen kutudan çıkma bir bağlantı sağlayabilirim.
Ek açıklamanın var olmasının tek nedeni bu mu? Yoksa özlediğim bir şey var mı? Genişletilecek bir kütüphane / çerçeve değil, sadece bazı iş mantığıyla ilgilenen bir uygulama olan kodda kullanarak herhangi bir şey kazanabilir miyim?