Der Code im Konstruktor sollte möglichst einfach sein und insbesondere keine potentielle Quelle für Exceptions sein.
Den folgenden Konstruktor nennt man
copy constructor weil das übergebene Objekt von gleichen Typ wie die Klasse selbst ist:
constructor TKlasse.Create(vorgaenger: TKlasse); overload;
Innerhalb des Konstruktors werden nur Daten kopiert und das geht so auch völlig in Ordnung.
Auch der Konstruktor der mehrere Werte aus einfachen Typen entgegen nimmt und im Objekt ablegt ist kein Problem.
Aber der Konstruktor
constructor Create(ID: Integer); overload; // Einlesen aus Datenbank, Erstellen Baum
passt hier nicht rein.
1. können bei Datenbankzugriffen Exceptions ausgelöst werden und 2. muss zwangsläufig auf globale Variablen (Datenmodul,
Query, Connection) zugegriffen werden.
Günstiger wäre es die Erzeugung eines Objekts dieser Klasse an anderer Stelle vorzunehmen:
Delphi-Quellcode:
function TDatenModul.CreateXYobjekt(ID: Integer):TKlasse;
begin
Query1.parameters.ParamValues['ID'] := ID;
Query1.Open;
Result := TKlasse.Create(Query1['...'], ...);
Query1.Close;
end;
Für die Beantwortung der Frage was in einen Konstruktor gehört und was nicht, versuche Dir einfach vorzustellen du müsstest die
Unit mit der Klasse in einem anderen Programm benützen.
Das bedeutet z.B. das der Zugriff auf globale Variablen nicht möglich ist.