hotti: Name für Entwurfsmuster

Beitrag lesen

Hakuna matata!

<cite class="Link siehe oben">In der objektorientierten Programmierung sagt das SRP aus, dass jede Klasse nur eine fest definierte Aufgabe zu erfüllen hat. In einer Klasse sollten lediglich Funktionen vorhanden sein, die direkt zur Erfüllung dieser Aufgabe beitragen.</cite>

Genauso funktioniert und ist mein Framework aufgebaut.

Mag ja sein, dass du das SR-Prinzip auch umsetzt, aber das ist jedenfalls nicht die Bezeichnung für eins das Muster, welche du in deiner Fragestellung beschrieben hast und deren Namen du suchst.

Es gibt _eine_ Instanz

Die Instanz ist also ein Singleton.

Ja, es ist ein Singleton.

die sich vom eingehenden Request bis zum Ausliefern der Response für _alles_ [...] verantwortlich zeichnet.

Das ist ein Front Controller, wie Daniel2 schon richtig erkannt hat. Der Front Controller ist ein eigenes Muster und hat nichts mit dem Controller im MVC-Muster zu tun, ich glaube dass dieses Missverständnis zu eurer Diskussion geführt hat.

Och ich hab das schon verstanden und auch nochmal gezielt gesucht: In der Apache-Welt heißt das Teil ResponseHandler und ich habe nirgendwo gelesen, dass ResponseHandler == Frontcontroller gesetzt wird.

Macht dein Front Controller denn wirklich alles? Gibt es keine andere Klassen oder Funktionen in deiner Architektur?

Mein ResponseHandler (von mir aus FC) ist die Basisklasse für an URLs gebundene Subklassen, Beispiel:
URLs: /foo.html, /bar.html, /feedback.html nutzen lt. Konfiguration ein Template, was aus dem Dateisystem geladen wird (der Dateiname ist konfigurierbar). Diese URLs sind über die Routingtable an class=TemplateFile gebunden.

TemplateFile erbt vom FC u.a. den Konstruktor (in Perl gewöhnlich als new() benannte Klassenmethode) und definiert mindestens eine der Interface-Methoden, z.B. um das Template nach $singleton->{BODY} zu laden.

URL /feedback.html bekommt ein zusätzliches Attribut verpasst: interface=Feedback weil hier Benutzereingaben zu verarbeiten sind. Damit erfolgt im FC ein require Feedback.pm und für class TemplateFile werden zusätzliche Interface-Methoden in seinem Scope definiert, nachdem die Instanz->TemplateFile bereits erstellt wurde.

Jetzt hat der Singleton alles, was er braucht, und im FC werden die Methoden des Interface aufgerufen.

Class TemplateFile ist eine sehr einfache Klasse. Es gibt Subklassen, die wesentlich komplexer sind und die können theroetisch beliebig viele weitere Methoden definieren und weitere Klassen mit use einbinden.

Nach dem Durchlaufen der Interface-Methoden ist die Response fertig und auch die Header (Content-Type u.a.) stehen fest; das wird dann nur noch an den Webserver geschickt.

Auf deine Fragestellung passen diverse Muster, was keine große Überraschung ist, weil sich Designpatterns eben überschneiden. Das Singleton-Muster und das Front Controller-Muster sind ganz offensichtlich zu erkennen, jenachdem wie komplex dein Front Controller ist, könnte er auch ein Gottobjekt oder ein Big ball of mud sein. Die letzten beiden Kandidaten sind aber bekannte Anti-Pattern und stehen im Wiederspruch zum SRP.

Mein FC (ResponseHandler) ist alles Andere als komplex. Er ist nur ein Dispatcher (Router) der den Code vermittelt und ein paar Interface-Methoden aufruft. Ca. 250 Zeilen Perl und eine flache Klassenhierarchie ;)

MfG

--
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.