contao/test — Issue #2695: Änderung der Singletons Environment, Input und Config in statische Klassen/Methoden
Author: importer
Created: 2011-11-29 10:08:20+00:00
State: open
Labels: Feature, framework

Es wäre aus Sicht der Software-Architektur sauberer die Singletons Environment, Input und Config in statische Klassen und Methoden umzusetzen.
Singletons werden im Normalfall nur dann benötigt, wenn man das Singleton hin- und herreichen muss, meist zur Verwendung mit anderen APIs. Gute Beispiele sind etwa Konkretisierungen eines abstrakten "DriverManager's", die nur eine Instanz benötigen und die per Provider an die Abstraktionsschicht des betriebenen "Dings" übergeben werden. Ein reales Beispiel dieses oder ähnlicher Fälle ist zum Beispiel die Java ServiceProvider-Architektur, JDBC, JAAS Authentication Provider oder ein generelles Beankonzept.

Vorteile:
Man muss anstatt `$this->Input->get(...)` nur noch `Input::get(...)` schreiben, welches semantisch die eigentliche Funktion besser ausdrückt, denn der Kontext in letzterem Beispiel ist der "globale" Geltungsbereich, also die aktuelle Skriptausführung/Seitenaufruf, anstatt bei ersterem, wo der Kontext zum Beispiel ein Modul ist (und die Funktion holt nicht "nur" die Eingabedaten dieses Moduls).
Es kann Abwärtskompatibel umgesetzt werden, in dem man die derzeitigen Implementierungen auf die neuen statischen Klassen delegieren lässt.
Außer Schönheit würde das langfristig noch den Vorteil bringen, das man irgendwann auf das Importieren dieser Klassen verzichten kann und damit auch keine `getInstance()` Aufrufe mehr hat, was eine geringe Leistungssteigerung zur Folge haben sollte.

Nachteile:
Minimale Performanceeinbußen durch Delegates (könnte durch "doppelt" Implementierung umgehen). Dies fällt natürlich wieder weg, sobald man die Abwärtskompatibilität entfernt.

Wenn diese Änderung akzeptiert wird, kann ich auch auf Wunsch, Patch-Files erstellen, um diese Änderung zu übernehmen.

--- _Originally created by backbone on November 25th, 2010, at 02:48pm (ID 2695)_