Das nennt man "Repository Pattern" und ist durchaus ok :)
Es ist mMn allerdings nicht unbedingt nötig, für die SQLs eine private Variable und eine Zugriffsfunktion anzulegen, da würde ich einfach statische Variablen draus machen.
Eventuell musst Du dabei aber über die Verantwortlichkeiten der Klassen nachdenken.
- Ein User-Repository liefert Dir User. Der Nutzer des User-Repository interessiert sich nicht für SQL und sollte dem Repository daher kein SQL liefern müssen.
- Du wirst mehrere Daten-Domänen in deiner Anwendung haben. Normalerweise baut man pro Domäne ein Repository.
- Um im fachlichen Code ein Repository zu bekommen, wendet sich der fachliche Code an eine Repository-Factory. Die initialisiert bei der ersten Bestellung die DB-Anbindung. Sie erzeugt jedes Repository genau einmal und cached es dann. D.h. wenn Du 5 mal ein User-Repository anforderst, bekommst Du jedes Mal das gleiche Objekt.
- Wenn Du gerne Repository und SQL Container in separaten Klassen haben willst, wäre es dann auch Aufgabe der Factory, das zusammenzustöpseln, ohne dass Du es in deinem problembezogenen Code zu sehen bekommst.
Codebeispiele lass ich erstmal weg - wenn Du dazu mehr wissen willst sag Bescheid.
Gruß Rolf