![]() |
Gültigkeit überprüfen
Hallo,
ich habe gerade ine kleines Grundsatzproblem: Meine Graph-Klasse soll sich selbst validieren können. soweit so gut. Nun war meine erste Idee: Okay, ich schreibe eine Methode, die einen bool zurckgibt ob der Graph valide ist. Problem: Wenn er nicht valide ist weiß man nicht warum. (es gibt 4 Kriterien die erfüllt werden müssen) 2. Versuch: Ich werfe einfach eine EInvalidGraphException wenn der Graaph ungültig ist. Vorteil: Man merkt direkt wenn er ungültig wird. Nachteil: man kann nicht einfach fragen ob der Graph gültig ist, man bekommt direkt eine Exception um die Ohren. 3. Versuch:
Code:
Aber wenn man z.B. den Hintergrund rot färben möchte wenn der Graph (noch) ungültig ist (er wird vll. gerade bearbeitet) wird jedes mal eine Exception geworfen und dann in einen Boolean "konvertiert" - unnötig.public bool isValid() { try { Validate(); return true; } catch (EInvalidGraphException) { return false; } } Was ist da die beste Vorgehensweise? |
Re: Gültigkeit überprüfen
Siehe WinAPI
Result = Integer 0 = OK 1 = Fehler 1 2 = zweiter Fehler ... Und wenn es verschiedene Exceptions gibt, dann kannst du diese leicht in verschiedene Werte/Zahlen umwandeln. |
Re: Gültigkeit überprüfen
Überzeugt mich noch nicht so richtig :stupid:
Weil einen Rückgabewert kann man ja ignorieren - und es soll z.B. erschwert werden dass man einen ungültigen Graph in einer Datei speichert. man könnte netürlich in der Speicherroutine ein
Code:
einbauen, aber das msdn schreibt:
if(! isvalid())
throw new InvalidGraphException(); Zitat:
|
Re: Gültigkeit überprüfen
Da musst du dich halt entscheiden.
Was msdn sagt ist nicht wirklich relevant, wenn ich mir ankucke was MS alles schon für Schrott produziert hat... Die Lösung mit den Exceptions ist doch gar nicht so schlecht. Wenn es dir auf den Keks geht, dass der Debugger dann immer anhält, kannst du ja in den Debugger-Optionen eine Ausnahme für EInvalidGraphException hinzufügen. Ansonsten halt mit Rückgabewerten, allerdings würde ich dann schon einen Enumerationstyp dem einfachen Integer vorziehen. |
Re: Gültigkeit überprüfen
Ich habs jetzt mal so gelöst:
Code:
Ist vll. n icht das gelbe vom Ei, aber ich glaube damit kann ich leben ;)
public bool Validate(out string Reason)
{ if (HasCycles(...)) { Reason = "Es darf keine Zyklen geben."; return false; } // Noch mehr Checks return true; } |
Re: Gültigkeit überprüfen
Mach es doch so, dass du wenn Operationen auf dem Graph statt finden zunächst auf Validität prüfst, und ggf. eine Exception der Art "OperationOnInvalidGraphException" wirfst. Operationen sollten ja eh in Methoden der Graph-Klasse gekapselt sein, so dass du da einfach die Abfrage reinwirfst.
Die Prüfungsfunktion selbst würde ich dann zusätzlich sichtbar machen, so dass der Benutzer der Klasse auch ohne OP auszuführen prüfen kann, und dann gibst du entweder ein Enum bzw. Set mit den Invaliditätskriterien zurück, oder du splittest das ganze in N Prüfungsmethoden, je eine pro Kriterium die dann nen bool zurückgeben. Zudem könntest du deinen Graphoperationen noch einen (optionalen, default true) Parameter spendieren, der die Prüfung auf Wunsch deaktiviert. Dass das dann auf eigene Gefahr des Benutzers der Klasse geht sollte dann noch wo erwähnt werden ;) (evtl. sogar per Compilerwarnung). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz