© saicle/Shutterstock.com
Symfony und der Dependency Injection Container

Symfony und der Dependency Injection Container


Mit Symfony 2 hat ein Konzept auf breiter Front Einzug gehalten, das zwar nicht neu ist, in der PHP-Welt aber bisher eher stiefmütterlich behandelt wurde: Dependency Injection. Wir schauen uns den Symfony Dependency Injection Container näher an.

Dependency Injection [1, 2] löst durch die konsequente Entkopplung der Komponenten innerhalb einer Anwendung gleich eine Handvoll Probleme. Neben der einfachen Erweiterbarkeit und dem simplen Austausch einzelner Teile der Applikation ist die Technik ein Teil des SOLID-Prinzips [3] und hilft uns beim Entwurf sauber testbarer, einfach zu wartender Software. Beschäftigt man sich zum ersten Mal mit dem Thema, hat das Prinzip verstanden und möchte es auf eine erste größere Applikation anwenden, ergibt sich auf den ersten Blick jedoch ein Nachteil: Das Setup der Objektgraphen wird schnell sehr komplex, große Blöcke im Code sind allein dem „Verdrahten“ unserer Objektinstanzen gewidmet. Dazu kommt ein organisatorisches Problem. Will man nicht alle Objekte bei jedem Request instanziieren und so Ressourcen im großen Stil verschwenden, wird es schnell recht komplex, jeweils nur die erforderlichen Teile zu laden. Beides lässt sich mithilfe eines Dependency Injection Containers lösen. Er bietet uns verschiedene Möglichkeiten, das Setup der Services und ihrer Abhängigkeiten zu konfigurieren, ohne tatsächlich Instanzen der Objekte zu erzeugen. Diese werden später erst bei Abruf eines Services ressourcenschonend instanziiert. Außerdem bietet uns der Container verschiedene Möglichkeiten zur Manipulation der Servicekonfiguration.

Das Projekt

Den ersten Kontakt zum Dependency Injection Container haben die meisten Entwickler indirekt, denn er ist eine der zentralen Komponenten des Full-Stack-Frameworks Symfony 2.x. Obgleich der Container auch eigenständig verwendet werden kann, sehen wir uns im Folgenden an, wie wir ihn nutzen können, um mit einem eigenen Symfony Bundle Services für die ganze Applikation zur Verfügung stellen können.

Als Beispielprojekt nehmen wir uns vor, die Wechselkurse des Euro als Service in unsere Anwendung zu integrieren. Die Europäische Zentralbank bietet hierzu einen Web Service an, der die Wechselkurse zu verschiedenen Währungen tagesaktuell zur Verfügung stellt. Für einen ersten Überblick öffnen wir den Tab For developers auf http://www.ecb.int/stats/​exchange/eurofxref​/html/​index.en.html. Dort stehen uns sogar fertige PHP-Schnipsel zur Nutzung des Services bereit. Ziel erreicht, Web Service läuft, wir ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang