dedlfix: Komplettes Projekt in OOP

Beitrag lesen

echo $begrüßung;

Bei Zend gibt es für einen Db_Adapter eine factory. Singleton ist der Frontcontroller.

Da ist ja auch die Aufgabenstellung eine andere. Einen Frontcontroller braucht man nur einen einzigen. Die DB-Factory erzeugt ein konkretes DBMS-spezifisches Objekt aus dem Vorrat der für die unterschiedlichen Systeme vorhandenen Adapter. Damit kann man beliebig viele Verbindungen zu beliebig vielen Servern und Systemen aufbauen. Chris hat aber nicht das Bedürfnis, mehrere Datenbankverbindungen aufzubauen sondern nur eine einzige zu seinem DBMS. Hätte er mehrere Server, die er gleichzeitig kontaktieren will, wäre das Singleton für ihn ungeeignet und eine Fabrik angebracht.

» »» database.ext. Klasse:
» »» Hier sind sämtliche anderen Datenbankfunktionen drin.
Die bringt wohl der Adapter mit, wie auch die PDOs.

Übst du dich im Glaskugellesen? :-)

Für erweiterte Funktionalität wird bei Zend der Db_Adapter an Db_Table übergeben, eine Klasse, als TableDataGateway fungiert.

Ich weiß ja noch nicht, was er im Detail vorhat. Wenn er keinen ORM braucht, ist das ja irrelevant. In meinen bisherigen Ausführen empfahl ich auch keinen ORM. Ein ORM ist ein allgemein gehaltenes Werkzeug. Wenn man aber spezielle Anforderungen hat, zeigt einem der mehr oder wenig starre Mapper schnell mal die seine Grenzen. Es spricht nichts dagegen, einen ORM eines Framworks zu verwenden, wenn der die eigenen Anforderungen erfüllt und man sowieso mit dem Framework arbeitet. Aber jemand, der Erfahrungen mit dem Erstellen einer Daten(bank)zugriffsschicht sammeln will, muss nicht auch gleich noch einen ORM anfangen. Das Zend Framework kann er sich ruhig trotzdem mal ansehen.

» Wenn MainKlasse ein Singleton ist, hieße das, dass mit jedem MainKlasse::getInstance() das ext-Objekt als Parameter übergeben werden muss. Dann kann die MainKlasse sich ein ext-Objekt auch selbst besorgen.
Wäre die Main-Klasse der Frontcontroller, würde dieser den Request an einen ActionController routen und der würde dann eine Model-Objekt instantiieren, welches (ggf. via Table-Data-Gateway) auf den Db_Adapter zugreift.

Nicht jeder Action-Controller hantiert nur mit einem Model. (Zwei oder mehr Action-Controller verkettet oder ein paar Plugins an die Verarbeitungskette angestöpselt und jeder mit Datenbankzugriff wäre auch ein Szenario.) Wenn also mehrere Datenbankzugreifer vorhanden sind, nützt dir die Möglichkeit der Erzeugung über den Db_Adapter noch nicht viel, wenn du am Ende nicht mehrere Verbindungen haben willst oder der Adapter kein Verbindungspooling mitbringt. Du brauchst dann auch noch eine zentrale Ablagestelle (z.B. Repository) und jemanden, der da einen Adapter reinlegt. Oder eben ein Singleton.

echo "$verabschiedung $name";