Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 5. Jan 2010, 14:39
Ich vermute du versuchst selbst ein eigenes Objektframework zu erstellen.
Das ist eine Aufgabe, die Jahre in Anspruch nehmen kann.
Schau dir erst an, was es bereits an (fast) fertigen Frameworks gibt (z.B. tiOPF).

Eine Datenklasse sollte nicht selbst das Lesen und Speichern in eine Datenbank implementiert.
Dadurch würde diese abhängig von einem bestimmten Datenbanksystem.
Jedes Datenobjekt braucht aber einen Status (zB. clean, neu, geändert, geloescht).

Vereinfachtes Beispiel wie so ein Framework funktionieren könnte:
Delphi-Quellcode:
Autos := TAutos.Create; // Autos hat den Zustand clean, da nichts zum Speichern enthalten

Auto := Autos.Add(TVolkswagen.Create); // Auto hat den Zustand neu, Autos ist geändert
Auto.Farbe := 'Quietschgelb';

Auto.Sitze := TSportSitze.Create; // Sitze hat den Zustand neu
Auto.Sitze.Farbe := 'Schwarz';

DBInterface.Save(Autos);
Das DBInterface sucht auf Grundlage der Klasse des übergebenen Objekts und dessen Status den passenden vorher registrierten Writer und übergibt diesem Autos.
Für TAutos gibt es keinen eigenen Writer, es wird der Writer für die Elternklasse ausgewählt.
Der Writer (TDatenobjektliste, geändert) ist in diesem Fall einfach eine Schleife über alle Objekte, für jedes Objekt wird DBInterface.Save({...}) aufgerufen.
Da es speziell für TVolkswagen keinen eigenen Writer gibt, wird der Writer für die übergeordnete Klasse ausgewählt.
Der Writer (TAuto, neu) speichert zuerst untergeordnete Objekte DBInterface.Save(Auto.Sitze), dann das Autoobjekt an sich und zum Schluss die Beziehung Zwischen Auto und Sitze.
Der Writer (TSportSitze, neu) speichert lediglich das Sitzeobjekt.

Für das Speichern aller Autos würde dem DBInterface auch eine einfache TDatenobjektliste genügen.
Zum Laden wird aber eine TAutos Klasse benötigt, damit ein geeigneter Reader ausgewählt werden kann.
DBInterface.Read(Autos); Der Reader (TAutos, clean) löscht die Liste, holt für jedes Auto ID und Typ, erzeugt abhängig vom Typ die passende Autoklasse (TVolkswagen), setzt die ID und ruft DBInterface.Read(Auto) auf. usw.
  Mit Zitat antworten Zitat