Wie organisieren und verwalten Sie Ihre Hilfsobjekte wie das Datenbankmodul, Benutzerbenachrichtigungen, Fehlerbehandlung usw. in einem PHP-basierten, objektorientierten Projekt?
Angenommen, ich habe ein großes PHP-CMS. Das CMS ist in verschiedene Klassen unterteilt. Einige Beispiele:
- das Datenbankobjekt
- Benutzerverwaltung
- eine API zum Erstellen / Ändern / Löschen von Elementen
- Ein Nachrichtenobjekt zum Anzeigen von Nachrichten für den Endbenutzer
- Ein Kontext-Handler, der Sie zur richtigen Seite führt
- Eine Navigationsleistenklasse, die Schaltflächen anzeigt
- ein Protokollierungsobjekt
- möglicherweise benutzerdefinierte Fehlerbehandlung
etc.
Ich beschäftige mich mit der ewigen Frage, wie diese Objekte am besten für jeden Teil des Systems zugänglich gemacht werden können, der sie benötigt.
Mein erster Ansatz vor vielen Jahren war es, eine globale $ -Anwendung zu haben, die initialisierte Instanzen dieser Klassen enthielt.
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
Ich habe dann auf das Singleton-Muster und eine Factory-Funktion umgestellt:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
aber damit bin ich auch nicht zufrieden. Unit-Tests und Kapselung werden für mich immer wichtiger, und nach meinem Verständnis zerstört die Logik hinter Globalen / Singletons die Grundidee von OOP.
Dann gibt es natürlich die Möglichkeit, jedem Objekt eine Reihe von Zeigern auf die benötigten Hilfsobjekte zu geben, wahrscheinlich die sauberste, ressourcenschonendste und testfreundlichste Methode, aber ich habe Zweifel an der Wartbarkeit auf lange Sicht.
Die meisten PHP-Frameworks, die ich untersucht habe, verwenden entweder das Singleton-Muster oder Funktionen, die auf die initialisierten Objekte zugreifen. Beide guten Ansätze, aber wie gesagt, ich bin mit keinem zufrieden.
Ich möchte meinen Horizont dahingehend erweitern, welche gemeinsamen Muster hier existieren. Ich suche nach Beispielen, zusätzlichen Ideen und Hinweisen auf Ressourcen, die dies aus einer langfristigen , realen Perspektive diskutieren .
Ich bin auch daran interessiert, etwas über spezialisierte, Nischen- oder einfach seltsame Ansätze für das Problem zu erfahren.
$mh=&factory("messageHandler");
es sinnlos ist und keinen Leistungsvorteil bringt. Darüber hinaus ist dies in 5.3 veraltet.