mAu
Erfahrenes Mitglied
Hallo Community.
Ich steh mal wieder vor einem "Problem". Ich habe jetzt des Öfteren in Quellcodes Konstrukte alá
Mir persönlich sagt das sehr zu, da man ja dadurch die SQL-Anweisungen in separaten Klassen hat und die restliche Anwendung somit nicht damit "belastet" wird. Außerdem kann man ja dann einfach auf z.B. Textfiles umsteigen.
Nur stellt sich mir die Frage, wie man das am besten implementiert.
Ich dachte, dass ich eine abstrakte Klasse BaseTable habe, von der ich eben die spezifischen SQL-Tabellen ableite und die Felder, Primärschlüssen etc. in den spezifischen Klassen angebe (meines Wissens ist das das Table-Data-Gateway Pattern).
Wenn ich jetzt eine Query auf eine Tabelle ausführe, bekomme ich entweder eine Instanz von RowSet, bei mehreren Tabellenzeilen, oder eine Instanz der Klasse Row zurück.
Diese kann ich dann über die Setter-/Getter-Funktionen manipulieren und zum speichern/updaten übergebe ich einfach die Instanz der Rowklasse an die Tableklasse.
Jetzt stellt sich mir u.A. die Frage, ob mein Ansatz richtig ist und weiterhin, wie ich die hasOne() und hasMany() Methoden am Besten implementiere.
Soll ich den Klassen, die eine Andere als Parent habe (z.B. Comments als Parent News) ein Attribut $_relatedTableField geben, welches ich dann wenn ich eine Tabelle von der BaseTable-Klasse ableite setze?
Z.b. bei der Comments dann:
Oder gibt's da eine elegantere Lösung? Vielleicht durch Vererbung? Na, ich warte einfach mal auf eure Tipps
Für weitere Anregungen, Verbesserungsvorschläge, Lob etc. bin ich offen Denn ich bin noch nicht sonderlich vertraut mit Design Pattern.
Nachtrag
Ist das UML-Diagramm so überhaupt richtig (abgesehen davon, dass die meisten Attribute public sind, was nicht meine Absicht ist/war)?
Ich steh mal wieder vor einem "Problem". Ich habe jetzt des Öfteren in Quellcodes Konstrukte alá
PHP:
$news = News::fetchByPK(1); // hole News nach Primärschlüssel (aus DB oder sonstiges)
$comments = $news->hasMany('comments');
Nur stellt sich mir die Frage, wie man das am besten implementiert.
Ich dachte, dass ich eine abstrakte Klasse BaseTable habe, von der ich eben die spezifischen SQL-Tabellen ableite und die Felder, Primärschlüssen etc. in den spezifischen Klassen angebe (meines Wissens ist das das Table-Data-Gateway Pattern).
Wenn ich jetzt eine Query auf eine Tabelle ausführe, bekomme ich entweder eine Instanz von RowSet, bei mehreren Tabellenzeilen, oder eine Instanz der Klasse Row zurück.
Diese kann ich dann über die Setter-/Getter-Funktionen manipulieren und zum speichern/updaten übergebe ich einfach die Instanz der Rowklasse an die Tableklasse.
Jetzt stellt sich mir u.A. die Frage, ob mein Ansatz richtig ist und weiterhin, wie ich die hasOne() und hasMany() Methoden am Besten implementiere.
Soll ich den Klassen, die eine Andere als Parent habe (z.B. Comments als Parent News) ein Attribut $_relatedTableField geben, welches ich dann wenn ich eine Tabelle von der BaseTable-Klasse ableite setze?
Z.b. bei der Comments dann:
PHP:
class Comments extends BaseTable
{
protected $_relatedTableField = 'news_id';
}
Für weitere Anregungen, Verbesserungsvorschläge, Lob etc. bin ich offen Denn ich bin noch nicht sonderlich vertraut mit Design Pattern.
Nachtrag
Ist das UML-Diagramm so überhaupt richtig (abgesehen davon, dass die meisten Attribute public sind, was nicht meine Absicht ist/war)?
Anhänge
Zuletzt bearbeitet: