2013-08-12 17 views
8

Ho letto e praticato l'iniezione di dipendenza negli ultimi due giorni, ma niente sta funzionando, e improvvisamente ho scoperto che c'erano alcuni quadri necessari per far funzionare l'iniezione di dipendenza. È vero? Non è una cattiva pratica rendere il mio progetto dipendente da qualche framework? Potrebbe essere fatto senza l'uso di un framework?Ho bisogno di un framework per poter usare Dependency Injection?

EDIT: Sono nuovo di programmazione in modo da Non capisco che cosa è la differenza tra instatiating una classe e con i suoi metodi (io non bisogno di un quadro di riferimento per questo) e l'utilizzo di iniezione di dipendenza e ciò che è meglio su di esso

EDIT : Ecco un esempio di me che non utilizzo un framework e cose che non funzionano TestNG @Factory annotation + not enough knowledge on Dependency Injection

+0

Penso che dovresti usare la struttura a molla. –

+0

ma DEVO usare un framework? –

+0

Guice non è esattamente un framework ... ma è molto meglio di quello che può fare un'iniezione di dipendenza Spring. –

risposta

5

No, non è necessario utilizzare un framework:

Dependency Injection

Naturalmente è possibile utilizzare un quadro troppo, come qualcuno ha detto è possibile utilizzare Spring Framework e utilizzare le loro annotazioni . Qui si ha un tutorial:

Dependency Injection with the Spring Framework

+0

2-3 ragazzi sopra detto che devo usare un quadro. Non ho capito bene. –

+0

@J.Kowalski un framework è il codice che qualcuno ha scritto. Puoi scrivere quel codice da solo se pensi che quelle librerie esistenti non siano buone per te. – zapl

+0

Non capisco quale sia la differenza tra l'instaziare una classe e l'uso dei suoi metodi (non ho bisogno di un framework per quello) e di usare l'iniezione della dipendenza e cosa c'è di meglio a riguardo. –

0

Per l'iniezione dipendenza Guice è ottimo (opinione personale). Almeno lo trovo molto meglio di quello che offre la primavera. È anche molto leggero.

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

2

Non è necessario usare un quadro, ma vi aiuterà a scrivere codice più pulito. Ad esempio, se si desidera iniettare una simulazione in una classe senza utilizzare un framework, è necessario un modo per farlo aggiungendo getter/setter, passarlo al costruttore o utilizzare variabili pubbliche.

public class AClassToTest{ 
    private A aDependentClass; 

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

Nel codice precedente, aMethodToTest() dipende di ciò che aDependentClass.someDependentMethod() rendimenti. Ciò significa che è necessario creare una simulazione di classe A e simulare i resi someDependentMethod. Questo è ancora possibile senza l'utilizzo di un quadro, ad esempio con l'aggiunta di un getter e setter in modo che è possibile impostare l'oggetto A nella 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 
} 

Se per esempio l'uso di primavera per l'iniezione di dipendenza, che vi permetterà di per impostare gli oggetti fittizi nel suo contenitore IOC utilizzando la notazione @Autowire. Quindi non è necessario avere setter/getter per i tuoi oggetti derisi che ti daranno un codice più pulito

Problemi correlati