Wenn ich eine Initialize-Methode veröffentliche, habe ich das Risiko, dass die eben nicht nur unmittelbar nach dem Erzeugen des Objekts aufgerufen wird, sondern auch danach noch.
Das ist richtig. Aber das kannst Du ja sicherstellen. Ich kann doch ein Objekt instantiieren und erst später zum Gebrauch Initialisieren.
Delphi-Quellcode:
Constructor TMyClass.Create(ImportantValues : TSetOfValues);
Begin
ThisAndThat := ImportValues;
Initialized := False;
End;
procedure TMyClass.LoadFromDatabase(...);
Begin
If Initialized
then Raise Exception.Create("Object allready initialized");
Database.Load(Self);
Initialized := true;
End;
Ist jetzt nicht so kompliziert. Ich kann deinen Einwand aber nachvollziehen. Das Belegen mit Initialwerten gehört in den Konstruktor, denn damit wird das Verhalten der Instanz definiert.
Das Laden aus einer Datenbank gehört eindeutig nicht dort hin. Es ist zudem viel schlechter testbar.