2013-08-12 13 views
8

Od dwóch dni czytam i stosuję zastrzyk uzależniający, ale nic nie działa i nagle dowiedziałem się, że potrzebne są pewne ramy, aby wtrysk zależności działał. Czy to prawda? Czy nie jest złą praktyką uzależnienie mojego projektu od pewnych ram? Czy można to zrobić bez użycia frameworka?Czy potrzebuję ram w celu użycia Dependency Injection?

EDIT: Im nowe do programowania, więc nie rozumiem, jaka jest różnica między instatiating klasę i stosując swoje metody (i nie potrzebują ramy tego) i za pomocą iniekcji zależność i co jest lepsze o nim

EDIT : Oto przykład ja nie za pomocą ramy i rzeczy nie działa TestNG @Factory annotation + not enough knowledge on Dependency Injection

+0

Myślę, że powinieneś użyć struktury wiosennej. –

+0

ale czy MUSZĘ użyć ramek? –

+0

Guice nie jest dokładnie ramą ... ale jest o wiele lepszy niż to, co może zrobić wstrzyknięcie zależne od Spring. –

Odpowiedz

5

Nie, nie trzeba używać ramy:

Dependency Injection

Oczywiście można użyć ramy też, jak ktoś powiedział, można użyć Spring Framework i używać ich adnotacje . Tutaj masz tutorial:

Dependency Injection with the Spring Framework

+0

2-3 facetów powyżej że muszę użyć ram. Jestem zmieszany. –

+0

@J.Kowalski to framework, który ktoś napisał. Możesz napisać ten kod na własną rękę, jeśli uważasz, że te biblioteki, które istnieją, nie są dla ciebie dobre. – zapl

+0

Nie rozumiem, jaka jest różnica między instatiating klasy i przy użyciu jego metod (nie potrzebuję ramy dla tego) i przy użyciu iniekcji zależność i co jest lepsze o tym. –

0

do wstrzykiwania zależności Guice jest super (osobista opinia). Przynajmniej uważam, że jest o wiele lepszy niż to, co zapewnia Spring. Jest również bardzo lekki.

https://code.google.com/p/google-guice/

2

Nie trzeba używać ramy, ale to pomoże Ci napisać czystsze kod. Na przykład, jeśli chcesz wstrzyknąć próbkę do klasy bez korzystania z frameworka, potrzebujesz do tego sposobu, dodając obiekty pobierające/ustawiające, przekazując je do konstruktora lub używając zmiennych publicznych.

public class AClassToTest{ 
    private A aDependentClass; 

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

W powyższym kodzie, aMethodToTest() zależy od jakich aDependentClass.someDependentMethod() zwrotów. Oznacza to, że powinieneś stworzyć próbkę klasy A i wyśmiewać to, co zwraca someDependentMethod. Jest to nadal możliwe bez użycia ramy, na przykład przez dodanie getter i setter, dzięki czemu można ustawić Object w TestClass:

@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 
} 

Jeśli na przykład użytku wiosną do wstrzykiwania zależności, to pozwolisz ustawić fałszywe obiekty w jego pojemniku IOC, używając notacji @Autowire. Wtedy nie musisz mieć ustawiaczy/modułów pobierających dla wyśmianych obiektów, które dadzą ci czystszy kod

Powiązane problemy