Ich würde mich mal näher mit Exceptions, bzw. der Programmflusskontrolle beschäftigen. Dann kannst Du ziemlich elegant deine 'Enumeration' vergessen und den Grund des Scheiterns komplett über Exceptions abbilden. Du definierst Dir einfach verschiedene Exceptionklassen, die Du individuell abfangen kannst (steht alles in der
OH)
Delphi-Quellcode:
Type
EWrongParameter =
Class (
Exception);
EInvalidUsage =
Class (
Exception);
...
Constructor TMyObject.Create (aParameter : TSomeType);
Begin
Inherited;
If UsageInvalid
Then
Raise EInvalidUsage.Create ('
Some Text');
If Not CheckParameter (aParameter)
Then
Raise EWrongParameter.CreateFmt('
Wrong parameter type %s',[aParameter]);
...
End;
...
Begin
Try
oMyObject := TMyObject.Create;
oMyObject.CanCallMethods;
Except
On E:EInvalidUsage
Do
HandleError;
On E:EWrongParameter
Do
HandleAnotherError;
// Alle anderen Fehler (Speicher etc.) werden nicht abgefangen und werden weitergeleitet!
End;
...
End;
So hast Du eine strikte Trennung im Programm. Der normale Programmfluss ist klar sichtbar und die Fehlerbehandlung ist abgegrenzt.