İlk olarak, tasarım yaklaşımını çerçeveler kavramından ayırmak istiyorum. En basit ve en temel düzeyde bağımlılık enjeksiyonu basitçe:
Bir üst nesne, alt nesne için gereken tüm bağımlılıkları sağlar.
Bu kadar. Bunun içindeki hiçbir şeyin arayüzler, çerçeveler, herhangi bir enjeksiyon tarzı, vb. Gerektirmediğine dikkat edin. Adil olmak gerekirse, ilk önce bu deseni 20 yıl önce öğrendim. Yeni değil.
Bağımlılık enjeksiyonu bağlamında ebeveyn ve çocuk teriminde karışıklığa sahip 2'den fazla kişi olması nedeniyle:
- Üst öğe , kullandığı alt nesneyi başlatan ve yapılandıran nesnedir.
- Çocuk pasif örneklenemez şekilde tasarlanmıştır bileşendir. Diğer bir deyişle, ebeveyn tarafından sağlanan bağımlılıkları kullanmak üzere tasarlanmıştır ve kendi bağımlılıklarını somutlaştırmaz.
Bağımlılık enjeksiyonu, nesne kompozisyonu için bir kalıptır .
Neden arayüzler?
Arayüzler bir sözleşmedir. İki nesnenin ne kadar sıkı bir şekilde bağlanabileceğini sınırlamak için varlar. Her bağımlılık bir arayüze ihtiyaç duymaz, ancak modüler kod yazarken yardımcı olurlar.
Birim testi kavramına eklediğinizde, herhangi bir arabirim için iki kavramsal uygulamaya sahip olabilirsiniz: uygulamanızda kullanmak istediğiniz gerçek nesne ve nesneye bağlı olan kodu test etmek için kullandığınız alaylı veya saplanmış nesne. Bu tek başına arayüz için yeterli bir gerekçe olabilir.
Neden çerçeveler?
Temel olarak, alt nesnelere başlangıç yapmak ve bağımlılık sağlamak, çok sayıda olduğunda korkutucu olabilir. Altyapıları aşağıdaki avantajları sağlar:
- Bileşenlere otomatik kablolama bağımlılıkları
- Bileşenleri bir tür ayarlarla yapılandırma
- Kazan plakası kodunu otomatik hale getirin, böylece birden fazla yerde yazılı olarak görmenize gerek kalmaz.
Ayrıca aşağıdaki dezavantajlara da sahiptirler:
- Üst nesne bir "kapsayıcı" dır ve kodunuzda hiçbir şey yoktur.
- Bağımlılıkları doğrudan test kodunuzda sağlayamazsanız, testi daha karmaşık hale getirir.
- Yansıma ve diğer pek çok hileyi kullanarak tüm bağımlılıkları çözdüğü için başlatmayı yavaşlatabilir
- Çalışma zamanı hata ayıklaması, özellikle kap arabirim ile arabirimi uygulayan asıl bileşen arasına bir proxy enjekte ederse daha zor olabilir (Spring'e yerleşik en-boy yönelimli programlama akla gelir). Konteyner kara bir kutu ve her zaman hata ayıklama işlemini kolaylaştıran herhangi bir konseptle oluşturulmamışlar.
Tüm söylenenler, takaslar var. Çok fazla hareketli parça bulunmayan küçük projeler için ve DI çerçevesini kullanmak için çok az neden vardır. Ancak, zaten sizin için yapılmış belirli bileşenlerin bulunduğu daha karmaşık projeler için çerçeve haklı görülebilir.
Peki ya [internetteki rastgele makale]?
Ne hakkında? Çoğu zaman insanlar fazlaca kısılabilir ve bir dizi kısıtlama ekleyebilir ve "doğru yol" yapmazsanız sizi rahatsız edebilir. Tek bir doğru yol yok. Makaleden yararlı bir şey çıkarıp çıkarmayacağınıza bakın ve aynı fikirde olmadığınız şeyleri görmezden gelin.
Kısacası, kendiniz için düşünün ve bir şeyler deneyin.
"Eski kafalarla" çalışmak
Mümkün olduğu kadar çok şey öğrenin. 70'lerinde çalışan birçok geliştiriciyle bulacağınız şey, birçok şey hakkında dogmatik olmamaları gerektiğini öğrenmeleridir. Onlarca yıl boyunca birlikte çalıştığı, doğru sonuçlar veren yöntemlere sahipler.
Bunlardan birkaçıyla çalışma ayrıcalığına sahip oldum ve onlar çok mantıklı bir şekilde acımasızca dürüst geri bildirimde bulunabilirler. Ve değeri gördükleri yerde, bu araçları repertuarlarına eklerler.