Hey,
ich versuche gerade meine Datenbankfunktionalität und die jeweiligen Felder in Klassen zu Kapseln. Dazu auch meine erste Frage.
Welche Variante haltet ihr für sinnvoller und vor allem warum:
Ich erstelle eine abstrakte Klasse "Datenbank". In dieser werden die Kernfunktionen wie Insert, Update, Verbindungsaufbau usw. gekapselt. Von dieser Klasse leitet ich dann jeweils die Tabellenklasse ab. Zum Beisspiel bekommt die Tabelle "User" die Klasse "User" zugeordnet. In dieser Klasse wird dann auch die Validierung der Daten und sonstiges Usermanagment gekapselt.
Oder ich benutze eine andere Methode. Ich leite die Klasse "User" nicht von "Datenbank" ab, sondern übergebe per Konstruktor eine Referenz dieser Klasse an "User". Wenn ich auf 5-6 verschiedene Tabellen zugreife, erspare ich mir schon einiges an
Overhead.(So mache ich es z. B. mit der Validierungsklasse).
Was ist eure Meinung?
Meine zweites kleines Brainstorming ist, eine gute Kapselung der SELECT Abfragen hinzubekommen. Ich möchte erreichen, dass sämtliche Abfragen nicht direkt mit der DB kommunizieren, sondern immer über eine Schnittstelle(siehe Oben, z. B. Klasse User).
Ein einfacher Lösungsansatz wäre sicherlich folgender
Allerdings werden hierbei immer alle Felder zurück gegeben, was nicht gerade sehr elegant ist. Darüber hinaus wird die Methode sicherlich nur statisch genutzt werden können(was aber nicht unbedingt ein Nachteil ist).
Was ist eure Meinung dazu? Macht es überhaupt Sinn, die DB-Zugriffe zentral zu Kapseln?
Vielen Dank im Voraus!
ich versuche gerade meine Datenbankfunktionalität und die jeweiligen Felder in Klassen zu Kapseln. Dazu auch meine erste Frage.
Welche Variante haltet ihr für sinnvoller und vor allem warum:
Ich erstelle eine abstrakte Klasse "Datenbank". In dieser werden die Kernfunktionen wie Insert, Update, Verbindungsaufbau usw. gekapselt. Von dieser Klasse leitet ich dann jeweils die Tabellenklasse ab. Zum Beisspiel bekommt die Tabelle "User" die Klasse "User" zugeordnet. In dieser Klasse wird dann auch die Validierung der Daten und sonstiges Usermanagment gekapselt.
Oder ich benutze eine andere Methode. Ich leite die Klasse "User" nicht von "Datenbank" ab, sondern übergebe per Konstruktor eine Referenz dieser Klasse an "User". Wenn ich auf 5-6 verschiedene Tabellen zugreife, erspare ich mir schon einiges an
Overhead.(So mache ich es z. B. mit der Validierungsklasse).
Was ist eure Meinung?
Meine zweites kleines Brainstorming ist, eine gute Kapselung der SELECT Abfragen hinzubekommen. Ich möchte erreichen, dass sämtliche Abfragen nicht direkt mit der DB kommunizieren, sondern immer über eine Schnittstelle(siehe Oben, z. B. Klasse User).
Ein einfacher Lösungsansatz wäre sicherlich folgender
PHP-Code:
function select($query="")
{
mysql_query("SELECT * FROM user " . $query);
}
Allerdings werden hierbei immer alle Felder zurück gegeben, was nicht gerade sehr elegant ist. Darüber hinaus wird die Methode sicherlich nur statisch genutzt werden können(was aber nicht unbedingt ein Nachteil ist).
Was ist eure Meinung dazu? Macht es überhaupt Sinn, die DB-Zugriffe zentral zu Kapseln?
Vielen Dank im Voraus!
Kommentar