Zitat:
Datenobjekte sollten im Prinzip dumm sein.
Schöner Satz, aber was bedeutet das genau für meine TAuto-Klasse...?
Wir haben ein Auto aus der Datenbank geladen und in einem Objekt der Klasse TAuto gespeichert. Darf/Sollte TAuto bzw. das konkrete Objekte Methoden haben, ausschließlich sich selbst zu ändern und zu löschen?
Alle Methoden, die mit mehreren Datensätzen zu tun haben (Alle anzeigen, bestimmte anzeige, alle löschen etc) sind bei mir in der Verwalterklasse (TAutos) und alle Methoden die für einen speziellen Datensatz gelten (FarbeÄndern etc...), sind in der Objektklasse (TAuto).
Hier mal meine derzeite Hierarchie
Code:
dmDatenbank (Datenbankmodul mit Zeos-Komponente)
TDBBaseFB = class(TObject) //Datenbank-Basis-
FB = Firebird
"Objekte" = class(TDBBaseFB)
"Verwalterklassen" = class(TObjectlist)
Delphi-Quellcode:
TDBBaseFB =
class(TObject)
private
Fdb_path:
String;
//Pfad zur DB
Fdb_utf8: Boolean;
//UTF8?
Ftabelle:
String;
//Name der Tabelle
FdbIDField:
String;
//Feldname der ID
FdbID: Integer;
//ID des Datensatzes
FdbData:
array of TSQLData;
//Parameter der Query
FdbSQLWhere:
String;
//Where-Condition
FdbSelectFields: TStringList;
//Zum Selektieren spez. Felder
procedure setDbPath(Value:
String);
procedure setDbUtf8(Value: Boolean);
procedure set_db_params;
virtual;
procedure setTabelle(Value:
String);
procedure setDbIDField(Value:
String);
procedure setDbID(Value: Integer);
procedure setDbWhereSQL(Value:
String);
public
{* Standard SQL-Aktionen / MUST HAVE *}
procedure Select;
virtual;
procedure SelectFields(Fields: TStringList);
virtual;
procedure Insert;
virtual;
procedure Update;
virtual;
procedure Delete;
virtual;
...
Durch die Vererbung dieser Methoden haben alle Objekte Zugriff auf die
FB-Datenbank. Nun ist die Frage, wie ich dies nutze. Ich hatte für mich entschieden, Verwalterklassen zu benutzen, wenn mehrere Objekte tangiert werden, und direkten Zugriff zu erlauben, falls sich ein Objekt selbst ändern oder löschen will. Es kann sich aber nicht selbst in die Datenbank eintragen.
Es ist bei mir immernoch ein bissl durcheinander - sowohl im Kopf, als auch im Code...