Hallo 1unitedpower,
die Factory kümmert sich darum, dass die Repositories Singletons bleiben, und sorgt für die Injektion der SQL Connection.
Nur, um sicher zu gehen, du redest von Factory-Methods, oder? Ansonsten wüsste ich nicht, wie du in PHP sicherstellen willst, dass eine Klasse nicht mehrfach erzeugt wird.
Ja, sicher. Im klassischen GoF Singleton-Pattern ist die Factory-Methode statisch in der Klasse enthalten, deren Objekt Singleton sein soll. Dann lässt sich technisch verhindern, dass ein Objekt anders als mit dieser Factory-Methode erzeugt wird.
Wenn man die Anwendung so baut, dass die DB-Verbindung nicht in einer globalen Variablen steht, sondern nur dem Repository-Factoryobjekt bekannt ist, kann man mittels dieses Exklusiv-Wissens ebenfalls sicherstellen, dass es keine unbefugte Instanziierung gibt.
Ich verstehe noch nicht wieso du aus Repositorys oder Datenbank-Verbindungen Singletons machen möchtest?
Normalerweise braucht man nur eine Connection zu einer Datenbank. Und die kann man entweder nach dem Prinzip Heiße Kartoffel handhaben (d.h. pro SQL Befehl in die Hand nehmen und dann schnell wieder wegwerfen) oder einfach beim ersten SQL öffnen und bis zum Ende des Requests offenhalten. In meiner Anwendung hatte ich einen DB-Adapter, der die verwendete DB kapseln sollte, und den als Singleton genutzt.
Ein Repository sollte ein Singleton (pro Repositoryklasse) sein, weil es wissen muss, was es während des laufenden Requests schon gemacht hat (welche Objekte sind unterwegs, welche sind verändert worden, etc). Wenn es 2 oder mehr gibt, kommen sie sich ins Gehege.
Rolf
sumpsi - posui - clusi