Dependency Injection
Hochschule Konstanz
Ausgangssituation
public class DocManager {
private LatexDoc doc ; public void newDoc ( ) {
doc = new LatexDoc ( ) ; }
… }
Document
Hochschule Konstanz
Nächster Schritt
public class DocManager {
private Document doc ;
public void newDoc ( Document inject ) { this.doc = inject;
}
public openDoc(){
this.doc.open();
Hochschule Konstanz
Eigenschaften
Anwendung des Prinzips IoC (Inversion of Control) Hollywood-Prinzip („don‘t call us, we‘ll call you“) Dokumente zur Laufzeit beliebig austauschbar
Einfaches testen z.B. mit Mocks möglich
Verwalter kann z.B. Konfigurationsdatei sein.
Komponenten lose gekoppelt
Hochschule Konstanz
Eigenschaften
Verwalter
<<creates>>
Hochschule Konstanz
Test mit dem Factory-Pattern
public class testDocManager {
Document realOne= docFactory.getInstance();
try{
WordDocMock mock = new WordDocMock();
docFactory.setInstance(mock);
DocManager doc = new DocManager();
doc.open();
asserttrue(mock.isOpen ());
}finally{
docFactory.setInstance(realOne);
Hochschule Konstanz
Test mit Dependency Injection
public class testDocManager {
WordDocMock mock = new WordDocMock();
DocManager doc = new DocManager(mock);
doc.open();
asserttrue(mock.isOpen());
}
(wenn man davon ausgeht, dass der Konstruktor des DocManagers den Mock an die Methode
„newDoc()“ weiterleitet)
Hochschule Konstanz
DI Frameworks
Grundsätzlich 3 Kategorien von Dependecy Injection Frameworks:
- Interface Injection ( Typ1 IoC ) - Setter Injection ( Typ2 IoC )
- Constructor Injection ( Typ3 IoC )
Hochschule Konstanz
DI Frameworks
Hier einige Dependecy Injection Framewoks:
-Google Guice
-PicoContainer (PicoContainer.Net) -Spring (Spring.Net)
-Avalon -…
Hochschule Konstanz
Contra
- Schlechtere Lesbarkeit des Codes
- Verwaltung der Klassen kann komplex werden
Hochschule Konstanz