Hallo,
beim Erstellen meines Frameworks habe ich bis jetzt auf Singleton verzichtet (bis auf Factories). Auch meine ursprüngliche Überlegung, den FrontController als Singleton zu realisieren, scheiterte kläglich, als ich versucht habe HMVC-ähnliche Knoten aufzurufen. Daher wird dieser nun, wie es sich gehört, normal instanziiert.
Hintergrund zum FC:
Ein Request landet beim FrontController. Der FC zieht dann den Router hinzu und wertet den Request aus. Der FrontController generiert dann mit diesen Daten und mit Hilfe eines ControllerBuilders (eine Art Factory) dann den Controller. Vor dem Ausführen der eigentlichen Action übergibt sich der FrontController nochmal selbst an den Controller. Das liegt daran, dass der FrontController Objekte enthält wie Config, Request, ServiceContainer etc, auf die man im Controller stets Zugriff haben sollte.
Ich bin so fixiert auf den FrontController, da dieser den Request, die Config, den Router oder auch den ServiceContainer (DI-Container) beinhaltet.
Nun kommen externe Komponenten ins Spiel: Als Beispiel nehme ich mal einen Logger, der nicht fester Bestandteil des Frameworks ist. Ein Writer dieses Loggers, etwa FirePHPWriter, muss auf meinen FrontController zugreifen könne, um den ServiceContainer zu bekommen, der wiederum eine Instanz von FirePHP spendet.
(Alternative: Der DatabaseWriter muss auf den Service 'PDO' zugreifen.)
Als mein FC noch Singleton war, konnte ich bequem sagen
Aber das geht ja nun nicht mehr, weil der ServiceContainer bzw. der FrontController nicht mehr global ansteuerbar ist.
Ich habe mir gedacht, nur den ServiceContainer als Singleton zu gestalten. Dieser ServiceContainer beinhaltet dann auch den Router, die Config etc.
Das widerspricht aber etwas meinem Prinzip, dass der ServiceContainer keine Framework-eigenen Objekte verwaltet.
Habt ihr eine Idee?
beim Erstellen meines Frameworks habe ich bis jetzt auf Singleton verzichtet (bis auf Factories). Auch meine ursprüngliche Überlegung, den FrontController als Singleton zu realisieren, scheiterte kläglich, als ich versucht habe HMVC-ähnliche Knoten aufzurufen. Daher wird dieser nun, wie es sich gehört, normal instanziiert.
Hintergrund zum FC:
Ein Request landet beim FrontController. Der FC zieht dann den Router hinzu und wertet den Request aus. Der FrontController generiert dann mit diesen Daten und mit Hilfe eines ControllerBuilders (eine Art Factory) dann den Controller. Vor dem Ausführen der eigentlichen Action übergibt sich der FrontController nochmal selbst an den Controller. Das liegt daran, dass der FrontController Objekte enthält wie Config, Request, ServiceContainer etc, auf die man im Controller stets Zugriff haben sollte.
Ich bin so fixiert auf den FrontController, da dieser den Request, die Config, den Router oder auch den ServiceContainer (DI-Container) beinhaltet.
Nun kommen externe Komponenten ins Spiel: Als Beispiel nehme ich mal einen Logger, der nicht fester Bestandteil des Frameworks ist. Ein Writer dieses Loggers, etwa FirePHPWriter, muss auf meinen FrontController zugreifen könne, um den ServiceContainer zu bekommen, der wiederum eine Instanz von FirePHP spendet.
(Alternative: Der DatabaseWriter muss auf den Service 'PDO' zugreifen.)
Als mein FC noch Singleton war, konnte ich bequem sagen
PHP-Code:
FrontController::getInstance()->getServiceContainer->get('FirePHP');
Ich habe mir gedacht, nur den ServiceContainer als Singleton zu gestalten. Dieser ServiceContainer beinhaltet dann auch den Router, die Config etc.
Das widerspricht aber etwas meinem Prinzip, dass der ServiceContainer keine Framework-eigenen Objekte verwaltet.
Habt ihr eine Idee?
Kommentar