Wie macht man das am saubersten?
Gar nicht. Logik gehört nicht in den Konstruktor. Damit man sich eben diese Fragen erst gar nicht stellt.
Schreibe einen Setter für das Datenpaket, in dem Du das Paket auf Korrektheit prüfst und wirf eine
Exception, wenn dir das Paket nicht passt.
Delphi-Quellcode:
Type
TMyClass = Class
Private
fPacket : TDataPacket;
Procedure DemandValidPacket(Const aValue : TDataPacket);
Procedure SetPacket(Const aValue : TDataPacket);
public
Constructor Create;
Property DataPacket : TDataPacket Read fPacket Write SetPacket;
End;
Procedure TMyClass.DemandValidPacket(Const aValue : TDataPacket);
Begin
if not aValue.IsValid then Raise EInvalidData.Create('Invalid Datapacket');;
End;
Procedure TMyClass.SetPacket(Const aValue : TDataPacket);
Begin
DemandValidPacket(aValue);
fPacket := aValue;
End;
//
...
Var
myClass : TMyClass;
Begin
myClass := TMyClass.Create;
Try
myClass.DataPacket := TheDataPacket;
...
Finally
myClass.Free;
raise;
End
End;