Einzelnen Beitrag anzeigen

Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#7

Re: [OOP-Struktur] Übergeordnete "Verwalter"-Klass

  Alt 5. Jan 2010, 18:48
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...
  Mit Zitat antworten Zitat