Skip to main content

Custom Factories RFC für den PHP Kern

This blog post might be outdated!
This blog post was published more than one year ago and might be outdated!
· 2 min read
Stephan Hochdörfer
Head of IT Business Operations

Dank Robert Lemke vom Typo3 Projekt gibt es seit einigen Tagen einen RFC für sog. Custom Factories für PHP. Die grundsätzliche Idee des RFC ist es via SPL die Objekterzeugung beeinflussen zu können, ähnlich wie es bsp. mit spl_autoload möglich ist eigene Klassenloader zu definieren. Er möchte damit Einschränkungen in Legacy Bibliotheken aufbrechen die es aufgrund von fest verdrahteten Abhängigkeiten nicht möglich machen eigene Komponenten innerhalb der Legacy Bibliothek zu verwenden. Im aufgeführten Beispiel wird dies gut anhand eines Logger-Beispiels aufgezeigt. Im Grunde halte ich die Idee für recht interessant. Ich denke viele Entwickler sind in der Vergangenheit über das Problem gestoßen dass sich Frameworks oder Bibliotheken von Drittanbietern an machen Stellen nicht optimal in die eigenen Anwendungsstrukturen einbinden lassen konnten bzw. es nur sehr umständlich möglich war eine Integration zu erreichen.

Etwas verwundert bin ich allerdings über die Beispiele mit der ObjectFactory, so schreibt er "If the mechanism of Dependency Injection is consequently used, this results in a lot of additional typing and many classes will need the ObjectFactory getting injected by the surrounding framework" . Dem kann ich leider nicht zustimmen. Das verwendete Framework sollte dem Entwickler alle Injection-Arbeiten abnehmen und statt der ObjectFactory die notwendigen Referenzen auf die real benötigen Klassen übergeben. Der Domaincode sollte m.E. so gut wie frei von Abhängigkeiten zu Frameworkklassen sein. Ich möchte weder in meinem Programmcode Objekte mit dem new Operator erzeugen noch abhängig zu Factories sein die das ganze für mich erledigen. Des weiteren halte ich es für extrem wichtig die Objektkonfiguration von der Implementierung zu trennen, denn nur so erreicht man eine maximal mögliche Wiederverwendung. Annotations im Programmcode oder das automatische Finden der Abhängigkeiten anhand von implementierten Interfaces scheint mir keine sinnvolle Umsetzung von DI zu sein.