Bağımlılık enjeksiyon deseni neden dörtlü çeteye dahil edilmedi?


37

Bağımlılık enjeksiyon düzeni neden dörtlü çeteye dahil edilmedi ? GOF, tarih öncesi yaygın otomatik testlerden geçti mi? Bağımlılık enjeksiyonu şimdi çekirdek bir model olarak mı kabul edilir?


18
.. çünkü "Bağımlılık enjeksiyonu" bir kalıp değildir!
Dipan Mehta,


14
Tekrarlanan her şey bir tekrarlama modeli oluşturur. Tüm tasarım öğeleri (benzersiz, çılgın fikirler değil) “kalıplardır”.
S.Lott

3
Bu uzun tepkiler muhtemelen soruyu doğruladıkları için yanıltıcıdır. Belirtildiği gibi, bağımlılık enjeksiyonu bir tasarım deseni değildir. Nesne somutlaştırması için, genellikle çerçeve tarafından işlenen bir "mekanizma" dır.
Nazar Merza

1
Bağımlılık enjeksiyonu bir kalıptır . Bu karşı Servis Bulucu deseni. Terimi icat eden Fowler'ı okuyun . Bu kadar saçma sapan insanın ne kadarını kestiği hakkında hiçbir fikrim yok.
James,

Yanıtlar:


100

Ben editörü oldu Yazılım Geliştirme Dört kitabın Gang çıktı ve ben birim test 1994 yılında yaygın bir uygulama olmadığını toplam güvenle, söyleyebiliriz zaman dergisi Tasarımı Kalıpları aslen yayınlandı.

1994 yılında, C ++ en çok kullanılan nesne yönelimli dildi ve programlayan çoğu kişi bir C arkaplanından geliyordu. İnsanların basitçe sahip olmadığı "nesnelerde düşünmek" şeylerinden biri, programınıza yüzlerce veya binlerce giriş noktası fikridir. Hakkında düşündün main(). Büyük bir projede çalıştıysanız, modül tabanlı bir program oluşturmak için bir (genellikle oldukça ayrıntılı) bir makefile olabilir. Ama "birim testi"? Bir işlem başlatmak, gerekli bellek bağlamını oluşturmak, yürütmek ve yıkmak için her bir yöntem temelinde? Bu çok radikaldi.

Java çoklu giriş noktası programlamasını daha belirgin hale getirdi. Orijinal Dot-Com patlaması döneminde, birim testi iyi bilinen bir teknikti, ancak ateş yakmasına ve evrensel bir pratik olmasına neden olan gerçekten JUnit'ti (yaklaşık 2001?).

Her ne kadar Strateji ve bir arayüze yönelik genel programlama kavramı GoF'un ve 90'ların ortalarındaki zeitgeist'in bir parçası olsa da, enjeksiyon fikri partiye oldukça geç geldi ('03-05?). Açıkçası, gri saçlarım DI'nin bu yönüyle ilgili hala oldukça şüpheli ("Çimenimden çık, lanet yapılandırma dosyaları!").


17
Böyle anlayışlı bir cevap için sadece bir oy kullanmamdan pişmanım.

@Larry OBrien: kongre tabanlı kayıtları taramak, yapılandırma kodunu büyük ölçüde basitleştirir ve ioc kaplarındaki xml yapılandırmasını pratik olarak ortadan kaldırır.
quentin-starin

4
Özünde bağımlılık enjeksiyonunun yapılandırma dosyalarına dayanmadığını da eklemek isterim. Hepsini elle yapabilirsiniz; bu da kullanımı çok kolaylaştırır ve hala çok esnek bir yaklaşımdır.
marco-fiset

31

Buna Strateji dediler .

Stratejileri, karmaşık sondaj adı olmadan bağımlılık enjeksiyonunun tüm özelliklerine sahip görünüyor.


16
-1. Üzgünüm! Strateji modelinin Bağımlılık Enjeksiyonu ile ilgisi yoktur.
Dipan Mehta,


14
@Dipan: Bunu reddetmeden önce, cevabı beş dakika düşünün.
Doktor Brown

6
Bağımlılık Enjeksiyonunun Strateji Modeline çok benzeyebileceği doğrudur, ancak insanlar bağımlılık enjeksiyonunu söylediklerinde genellikle Stratejiden (özellikle IoC kabı) çok farklı olduğunu düşündüğüm Kontrol İnversiyonu anlamına gelir.
MattDavey

8
DI daha yaratıcı bir yapıya sahiptir. Stratejileri yaratır ve enjekte eder. Bunun bir strateji olduğunu söylemek gerçeğin sadece yarısı. DI daha çok mikro çekirdek desenidir! İnsanların bunu oyladıklarına inanamıyorum. Strateji, bir zorunluluk değil, iyi bir DI özelliğine benzer.
Falcon

0

Bağımlılık Enjeksiyonunun katmanlardaki uygulamayı ayırırken daha alakalı olduğunu düşünüyorum. Bağımlılık enjeksiyonunu düşündüğümüz bir diğer alan ise birim testleridir. Ve tarih öncesi öneriniz doğru görünüyor. Eğer çete 2012'de kalıpları toplayacak ve ayıracaksa, kesinlikle bağımlılık enjeksiyonu orada olacak.

Strateji tartışmalarda ortaya çıkabilir ancak Strateji bağımlılık enjeksiyonundan bahsetmez. Ancak, strateji modelini tek bir projede veya dll'de kullanırken (tüm sınıflar ve arayüzler tek bir projede kalır), bağımlılık enjeksiyonunu yaptığımız anlaşılıyor. Aslında değiliz.

Şimdi, strateji modelinde belirtilen sınıflar ve arayüzler farklı projelerde veya kademelerde ayrılırsa, bağımlılık enjeksiyon tekniklerini kullanmak zorunda kalacağız. Birlik yapılandırma dosyalarını kullanabiliriz (çalışma zamanı değişikliği olsa bile mümkün değildir). Ancak, Strateji modeli bir bağımlılığın nasıl enjekte edileceğini söylemez.

Bağımlılık enjeksiyonuna yakından benzeyen bir kalıp varsa, Özet Fabrika Yöntemi kalıbıdır. Bu model bağımlılığı enjekte etmek için bir strateji modelinde kullanılabilir.


2
Bu soruya cevap vermiyor. Lütfen diğer cevapları cevaplamak yerine asıl soruyu okuyun :)
Andres F.

-4

Cevap Stratejisi% 100 doğru. Oy kullandım ancak yorum yapabilir.

“Strateji, algoritmanın onu kullanan müşterilerden bağımsız olarak farklılık göstermesine izin veriyor. [1] Strateji, Gamma ve arkadaşlarının, yazılım tasarımını tanımlamak için kalıpları kullanma kavramını popülerleştiren etkili Tasarım Dizileri'nde yer alan kalıplarından biridir.”

Bir tasarım deseni kullanımına bağlı değildir. Bağımlılık Enjeksiyonu, Strateji kalıbı kullanılarak gerçekleştirilir. Her bir kalıbı kullanım durumuna göre adlandırırsak, birçok kalıbı yeniden adlandırmamız gerekir.

Depo deseni yeni bir şablon değil, Şablon Şablonu.

"Bu tasarım modelinin şablon yönteminde, bir veya daha fazla algoritma aşaması, farklı davranışlara izin vermek için alt sınıflar tarafından geçersiz kılınabilir ve aynı zamanda genel algoritmanın hala takip edilmesini sağlar."

Çoğunlukla, desenler, birleştirilmiş ve MVC modeli gibi adlandırılmış birden fazla desendir.

GOF, kullanılmış Soyut Soyut sınıfları ara yüzlere sahip değildi ve ayrıca C ++ 'nın birden fazla sınıftan miras alma yeteneğinden de faydalandı.


1
Bir modelin amacı kesinlikle ayırt etmek için önemlidir. GoF kalıpları arasında Adaptör ve Proxy iyi örneklerdir - aynı forma ancak farklı amaçlara sahiptirler. Ayrıca DI'nin Strateji kullanılarak uygulandığına dair iddiasına katılmıyorum; Strateji, amacı ve yapılandırılan nesnenin kullanımı konusunda daha belirgindir, bu nedenle Stratejinin DI ile birlikte uygulandığını söylemek daha makuldür.
Jules
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.