1unitedpower: Klasse aus Datenbank füllen, danach die Klasse verarbeiten

Beitrag lesen

Ich verstehe noch nicht wieso du aus Repositorys oder Datenbank-Verbindungen Singletons machen möchtest?

Normalerweise braucht man nur eine Connection zu einer Datenbank.

Eine Verbindung je Datenbank. Wie ich schon schrieb: bei Synchronisierungen von Datenbeständen aus verschiedenen Datenbanken benötigt man mindestens zwei Verbindungen und am besten auch zwei Repositories.

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.

Wenn ich dich richtig verstehe, dann befürchtest du also Race-Conditions. Wenn das das Problem ist, dann verschafft das Singelton-Pattern aber auch keinen Abhilfe. Ein Singelton ist nicht unverisal einzigartig, sondern nur pro Prozess. Gerade bei PHP-Webanewndungen ist es aber üblich, dass mehrere Prozesse gleichzeitig laufen. Die Race-Condition bestünde also immernoch. Dritte Programme, die auch mit der Datenbank kommunzieren mal außenvor gelassen.

In vielen Fällen hilft es schon, wenn man die betroffenen SQL-Statements in einer Transaktion abwickelt. In komplizieren Fällen, muss man auf Anwednungsebene die konkurrierenden Zugriffe auf kritische Ressourcen managen.