2013-08-12 25 views
8

Son iki gün boyunca bağımlılık enjeksiyonunu okuyup pratik yapıyorum ama hiçbir şey çalışmıyor ve aniden bağımlılık enjeksiyonunun işe yaraması için gerekli bazı çerçevelerin olduğunu öğrendim. Bu doğru mu? Projemin bazı çerçevelere bağlı olması kötü bir uygulama değil mi? Bir çerçeve kullanılmadan yapılabilir mi?Bağımlılık Enjeksiyonunu kullanmak için bir çerçeveye ihtiyacım var mı?

DÜZENLEME: Bir sınıf instatiating ve (i bunun için bir çerçeve ihtiyacım yok) yöntemlerini kullanarak ve bağımlılık enjeksiyon kullanarak ve hangi arasındaki fark o

DÜZENLEME hakkında daha iyi olduğunu ne olduğunu anlamıyorum bu yüzden programlamaya Im yeni : Burada bir çerçeve kullanmıyorum ve çalışmayan bir şey var. TestNG @Factory annotation + not enough knowledge on Dependency Injection

+0

Bahar çerçevesini kullanmalısınız. –

+0

ama bir çerçeve kullanmalı mıyım? –

+0

Guice, tam olarak bir çerçeve değil ... ama Bahar bağımlılığı enjeksiyonunun yapabileceğinden çok daha iyi. –

cevap

5

Hayır, bir çerçeve kullanmak zorunda değilsiniz: Birisi Spring Framework kullanmak ve onların ek açıklamaları kullanabilirsiniz söylediği gibi sen de bir çerçeve kullanabilirsiniz Tabii

Dependency Injection

. Burada bir öğretici vardır: bir çerçeve kullanmak zorunda değilsiniz

Dependency Injection with the Spring Framework

+0

2-3 bir çerçeve kullanmalıyım. Kafam karıştı. –

+0

@J.Kowalski bir çerçeve, birinin yazdığı koddur. Var olan kütüphanelerin sizin için iyi olmadığını düşünüyorsanız, bu kodu kendi başınıza yazabilirsiniz. – zapl

+0

Bir sınıfın isimlendirilmesiyle yöntemlerini (bunun için bir çerçeveye ihtiyacım yok) ve bağımlılık enjeksiyonunu ve bununla ilgili daha iyi olanı kullanmanın arasındaki farkın ne olduğunu anlamıyorum. –

2

ama sizi temizleyici kod yazmak yardımcı olacaktır. Örneğin, bir çerçeveyi kullanmadan bir sınıfa alay etmek isterseniz, bunun için getters/setters ekleyerek, kurucuya ileterek ya da genel değişkenleri kullanmanız gerekir. Yukarıdaki kodda

public class AClassToTest{ 
    private A aDependentClass; 

    public void aMethodToTest(){ 
     int i = aDependentClass.someDependentMethod(); 
     .. 
     .. 
    } 
} 

, aMethodToTest() neyi aDependentClass.someDependentMethod() getiri bağlıdır. Bu, A sınıfında bir sahtekarlık yaratmanız ve someDependentMethod'un ne getirdiğini anlamanız gerektiği anlamına gelir.

@Test 
public void testAMethodToTest(){ 
    //here you must set the object A in your AClassToTest object 
    //Create a mock of A with desired values 
    //and set it using a setter 
} 

Eğer bağımlılık enjeksiyon için örnek kullanım bahar, size sağlayacaktır edin: Bu, DenemeSınıfı nesne A'yı ayarlayabilirsiniz böylece bir alıcı ve ayarlayıcı ekleyerek örneğin bir çerçeve kullanmadan hala mümkün Sahte nesneleri IOC kapsayıcısında @Autowire notasyonu kullanarak ayarlamak. O zaman size daha temiz kod verebilecek alaylı nesneleriniz için ayarlayıcıları/alıcıları kullanmanıza gerek yoktur.

İlgili konular