Zum Inhalt

Buch-Rezension zu "Dependency Injection"

Dependency Injection

“Dependency Injection - Design patterns using Spring and Guice” von Dhanji R. Prasanna erschien im August 2009 bei Manning. Prasanna arbeitet bei Google und beteiligt sich an der Entwicklung von Guice. Der Autor ist somit mitten drin und kann aus erster Hand berichten.

Das Buch startet mit einer Erklärung was Dependency Injection (DI) ist und wieso derzeit so viel davon gesprochen wird. Ein kleines Beispiel mit der Klasse Emailer, der vor dem absenden die Rechtschreibung prüfen soll, dient dabei der Erklärung der Vorteile von DI.

public class Emailer {
    private SpellChecker spellChecker;

    public Emailer() {
        this.spellChecker = new SpellChecker();
    }

    public void send(String text) {
        spellChecker.check(text);       
        // send if ok...
    }
}

Die Fragen rund um diesen Code sind vielfältig: Wie kann man testen, ob der SpellChecker aufgerufen wurde? Oder wie ändert man die Sprache? Als Antwort darauf werden Service Locator, Factories und Setter für den SpellChecker aufgezeigt. Es funktioniert, ist aber nicht wirklich elegant. DI wird darauf hin mit dem Hollywood Prinzip ("Don't call us; we'll call you!") eingeführt. Wieso soll man alles selber immer wieder konfigurieren, wenn man all dies zentral an einer einzigen Stelle machen kann? Eine kurze Auflistung der DI-Frameworks rundet das 1. Kapitel ab.

Ab Kapitel 2 geht es um die Benutzung von DI. Der Emailer wird aufgenommen und mittels Guice, PicoContainer und Spring injiziert. Es geht weiter mit dem Identifizieren der Abhängigkeiten, die man aufteilen will. Die Benennung der Abhängigkeiten (Keys) und deren Typ (String, Enum, Klasse) werden mit allen Vor- und Nachteilen bis ins kleinste Detail auseinander genommen.

Das Einfügen der Abhängigkeiten kann auf verschiedenen Ebenen erfolgen: im Konstruktor, per Set-Methode oder auf Feldern. Kapitel 3 liefert zu allen Möglichkeiten eine Erklärung.

Die Modularisierung der Architektur der Applikation füllt Kapitel 4, bevor es in Kapitel 5 und 6 um den Sichtbarkeitsbereich (Scope) der einzelnen Objekte geht. Kapitel 7 widmet sich dem Lebenszyklus der Objekte und Kapitel 8 deren Verhalten. In Kapitel 9 werden Best Practices für das Design des Codes und auf was bei nebenläufigen Programmen geachtet werden muss gezeigt.

Kapitel 10 zeigt die Integration von DI in bekannte Frameworks. In Kapitel 11 wird zum Abschluss eine ganze Applikation von Grund auf mit Hilfe von DI erzeugt.

Fazit

Der Anfang des Buches zeigt sehr gut die Einsatzmöglichkeiten und die damit verbundenen Vorteile von DI auf. Es war klar, verständlich und auf den Punkt gebracht. Ab Kapitel 2 geht es dann sehr schnell (zu?) tief in die Materie hinein. Die ganzen Überlegungen zu den Keys waren zwar lehrreich, doch ist der Umfang viel zu gross. Ab Buchmitte war das lesen äusserst mühsam. Bei einem Problem würde ich die Detaillierung sicher schätzen. Da ich mich aber über die Möglichkeiten von DI und der konkreten Anwendung informieren wollte, ging es viel zu sehr ins Detail. Die Beispiele und auch der Text dazu hatte in dem Teil auch nicht die Qualität, die man sonst von Manning gewohnt ist. Kapitel 11 war dann wiederum sehr gut - da gab es wieder einen klaren Bezug zur Praxis.

Damit ich mir das Buch noch einmal kaufen würde, müsste etliches an der Strukturierung geändert werden. Pro Kapitel ein Thema, die detaillierten Ausführungen in eigene Kapitel oder in den Anhang und in der Zusammenfassung keine neuen Ansätze einbringen. (OK, vielleicht waren diese "Neuigkeiten" bereits im Kapitel drin aber von den vielen anderen Themen rund herum verdeckt - das macht es aber auch nicht besser) Einige Dinge sind noch nicht ganz „rund“ und mit ein wenig Nachbessern könnte man da noch viel verbessern. Es hat sehr viele Informationen drin, doch kommen die derzeit nicht wirklich zur Geltung.

„Dependency Injection“ kann ich nur dann empfehlen, wenn man sich ganz detailliert über das Thema informieren will. Ansonsten wartet man wohl besser auf die 2. Ausgabe.

Zum Buch

Dependency Injection - Design patterns using Spring and Guice” von Dhanji R. Prasanna, 2009 Manning, ISBN 978-1-933988-55-9, 352 Seiten