Hallo,
zuerst einmal eine kleine Entschuldigung: Mir ist für mein "Problem" kein besserer Titel eingefallen. Ich änder ihn aber gerne ab, falls jemanden ein besserer Titel einfällt. Nun zum Problem:
Es geht mir um die Struktur und Aufgabenverwaltung von Objekten. Momentan ist es bei mir so, dass ein Objekt einen Datensatz aus der Datenbank repräsentiert. Jedes Objekt wird von einer Master-Klasse abgeleitet, welche die
DB-Methoden "Select, Insert, Delete und Update" bereitstellt. Die Update und Delete-Methoden sind so programmiert, dass sie immer nur das Objekt in der
DB ändern, welches diese Methode aufgerufen hat - also in der Master-Klasse wird fest eine ID des Datensatzes in die Where-Klausel eingesetzt. So können Objekte sich selbst ändern oder löschen.
Nun meine Frage: Angenommen wir bauen Autos und leiten von der Master-Klasse folgende Klassen ab um tolle Objekte zu erstellen: Auto, Reifen und Sitze. Das Auto soll auch wieder in der Datenbank gespeichert werden. Soll ich jetzt zum Speichern in der
DB die Methoden des Objektes verwenden, oder soll ich für alle Klassen Verwalter-Klassen schreiben, die spezielle Verwaltungsmethoden übernehmen.
Beispiel 1 - Ohne Verwalterklasse
Delphi-Quellcode:
var
Auto: TAuto;
Reifen: TReifen;
Sitz: TSitze;
begin
Auto:=TAuto.Create;
Reifen:=TReifen.Create;
Sitz:=TSitze.Create;
Reifen.Druck:=2;
Sitz.Farbe:='Schwarz';
Auto.Reifen:=Reifen;
Auto.Sitz:=Sitz;
Auto.Insert;
end;
Hier würde das erstellte Objekt zunächst keinen Datensatz der
DB sein. Ich richte mein Objekt ein, konfiguriere es und lege es dann in der
DB ab. Aber eine Verwalterklasse (zb. TAuto
s) bräuchte ich dennoch, um mehrere Autos zu verwalten oder abzuändern.
Beispiel 2 - Mit Verwalterklasse
Delphi-Quellcode:
var
Autos: TAutos;
Auto: TAuto;
Sitze: TSitze;
begin
Autos:=TAutos.Create;
Autos.LadeAutosAusDerDB;
ZeigeAlleAutosInEinerTreeViewAn();
//Neues Auto bauen
Auto:=TAuto.Create;
Sitze:=TSitze.Create;
Sitze.Farbe:='
Schwarz';
Auto.Farbe:='
Quietschgelb';
//Auto in der DB speichern; Verwalterklasse macht das!
Autos.SpeicherInfosUeberNeuesAuto(Auto);
//TreeView aktualisieren
Autos.LadeAutosAusDerDB;
ZeigeAlleAutosInEinerTreeViewAn();
end;
Ich hoffe, ihr erkennt den Unterschied und das, was ich mir dabei denke. Objekte in der
DB ablegen soll nicht die Aufgabe eines "kleinen" Objektes sein - es soll nur einen Datensatz repräsentieren und alle
DB-Aktionen ausführen können, die SICH SELBST betreffen.
Die Verwalterklasse soll sich um alles kümmern, was übergeordnet mit dem gesamten "Klassenthema" zusammenhängt, also "TAdresse
n", "TTier
e" etc.
Ist das richtig, sinnvoll, zu kompliziert, hab ich mich komplett unverständlich ausgedrückt
Ich kann das grad sehr schwer beschreiben, was ich mir da denke - aber ich hoffe, dass ihr es mit den Beispielen versteht.
Das Negative an der Sache ich, dass Verwalterklassen doch mehr Schreibarbeit bedeuten.
Nunja, ich lasse euch jetzt mit dem Roman mal kurz alleine.
Vielen Dank im Voraus!