Hi!
Singletons sind die Objekt gewordene Reinkarnation der globalen Variablen.
Wenn man das also haben will, sind sie also ein geeignetes Mittel.
Sie sind schwierig vernünftig testbar, sie enthalten sehr leicht "global state", der sich störend auf den Programmablauf auswirken kann, wenn er nicht beabsichtigt ist.
Wenn man also nicht nach TDD entwickelt ist das kein Nachteil. Inwieweit befürchtest du die negativen Auswirkungen von einem "global state" im konkreten Anwendungsfall?
Und die Datenbank ist in den seltensten Fällen zwingend singular. Im Gegenteil: Der Zugriff auf den persistenten Speicher erfolgt immer häufiger so, dass für den jeweiligen Zweck optimierte Speichermethoden benutzt werden, und zwischen den einzelnen Klassen mit "Datenbankzugriff" auch schon mal unterschiedliche.
Konkretisier das mal bitte. Gern auch an einem Beispiel.
Zumal ein Datenbankzugriff ohnehin Puffer benötigt, die man nicht singletonisieren kann -
In welchem Fall wäre das so? Für den Puffer des Abfrageergebnisses soll ja nicht das Connection-Singleton zuständig sein. Das Resultset hat seine eigene Ressourcenkennung und benötigt ein eigenes Objekt.
und mysql_connect() bei zwei Aufrufen mit identischen Parametern die bestehende Connection verwendet, also der Haupteffekt des Singletons schon von der zugrundeliegenden Funktion erfüllt wird.
Es geht auch darum, die ständig wiederkehrenden Handlungen rund um den Verbindungsaufbau zu zentralisieren. Ob mehrere gleiche mysql_connect() von sich aus die gleiche Connection verwendet ist dabei nicht weiter von wesentlichem Belang.
Lo!