| 

.NET C# Java Javascript Exception

1
Hallo zusammen,

ich arbeite gerade an einem eigenen PHP Framework. Mein Ziel ist es ein reines OOP MVC Framework auf die Beine zu kriegen. Bin eigentlich auch schon fast fertig. Der Sinn und Zweck eines eigenes Frameworks will ich aber nicht diskutieren, vielmehr habe ich eine Designpattern Frage bezüglich Klassen die nur einmalig instanziert werden (zB. die Router Klasse, welche die URI ausliest und wiederum den Controller instanziert und die Action aufruft).

Am besten ich zeig die Sache als Beispiel und zwar möchte ich wissen ob ich die Sache so...
$router = new Router();
$router->execute($request);

oder aber so...
new Router($request);

programmieren soll? Was ist so üblich in der OOP Welt? Soll ich explizit eine execute-Methode schreiben, die dann erst die Hauptfunktionen der Klasse ausführen soll, oder aber gleich in den Konstruktor schieben und bei der Instanzierung ausführen?

Um beim Beispiel zu bleiben, die Router Klasse brauche ich danach nicht mehr. Den Request nutze ich weiter, kann ihn auch weiterhin nutzen da ich ihn ja nur übergeben habe (Dependencies Injection sei Dank).

Freue mich auf Antworten von OOP und/oder PHP Spezialisten :)

Gruss
News:
02.04.2013
rjgamer 31 3
2 Antworten
2
... vielmehr habe ich eine Designpattern Frage bezüglich Klassen die nur einmalig instanziert werden ...

Ich würde in diesem Fall das Singleton Pattern verwenden. Dadurch wird sichergestellt das nur eine Instanz der Klasse existieren kann und somit erübrigt sich Deine Frage
02.04.2013
Jaksa 4,0k 1 8
Bin ich klar dagegen, Singleton resp. statische Klassen lassen sich immer vermeiden und verführen nur zur Auslagerung von Funktionen die man nicht korrekt OOP freundlich strukturieren mag.

Mein Framework setzt auf Namespaces, somit ich kann nochmals verhindert werden dass irgendwer die Router Klasse in seinem Controller instanziert.
rjgamer 03.04.2013
Singleton hat nichts mit statischen Klassen (jedenfalls im .NET) zu tun und wird auch öfters eingesetzt. Singleton erlaubt es eben, nur eine Instanz einer Klasse zu erstellen und ist an einigen Stellen durchaus sinnvoll.
lbm1305 03.04.2013
Leider handelt die Frage nicht von .NET sondern von PHP. Aber auch hier ist die Klasse, welche Singleton sein soll, selbst nicht statisch (sondern nur ihre Funktionen und Felder...)
Ein Beispiel, wie Singletons unter PHP aufgebaut werden, finden sich hier: http://www.phpbar.de/w/Singleton
Mir persönlich gefällt der Ansatz der selbst verwalteten Klasseninstanz :) (wobei das wiederrum genau so ja auch unter .NET möglich wäre)
Karill Endusa 03.04.2013
0
Ich würde eine Seperation des Konstruktors und der Methode bevorzugen.

Den durch die Übergabe des Request an den Konstruktur ist nicht ersichtlich, was dieser damit tut. Mit der Methode jedoch ist dieses auch von außen ersichtlich.
02.04.2013
mafis90 1 1
Ich halte es immer so, dass alles das, was die Klasse benötigt um ihre Aufgabe zu erfüllen per Konstruktor injiziert wird. Die Klasse "Router" kann aber auch ohne den Request existieren. In deiner Bschreibung hat die Klasse aber gleich 3 Aufgaben, wenn ich das richtig verstanden habe.
lbm1305 02.04.2013

Stelle deine Php-Frage jetzt!