2008-11-06 5 views
5

Ich bin gerade auf eine Eigenschaft Setter gestoßen, die Ausnahmen (alle Ausnahmen; ich weiß, das ist schlecht, aber es ist hier nicht relevant), und nur protokolliert sie. Vor allem denke ich, dass es auch durch sie gehen sollte; Warum warte auf einen Crash und eine Log-Studie, wenn du weißt, dass etwas nicht stimmt?Ausnahme vs Validierung

Meine Hauptfrage ist jedoch, validiere ich gegen ungültige Datumswerte, füge ein RuleViolation-Objekt zu einem ValidationRules-Objekt in meinem Dokument hinzu oder werfe eine InvalidDate-Ausnahme aus oder lasse die CLR die Ausnahme für mich auslösen (ungültige Daten) sind nichts anderes als ungültige Daten, nicht für den Bereich etc. überprüft.)

Antwort

2

Ausnahmen sollten immer dann ausgelöst werden, wenn die Methode oder das Klassenmitglied die Aufgabe, für die es vorgesehen ist, nicht ausführen kann.

Wenn also der Setter die Eigenschaft nicht festlegen kann, sollte eine Ausnahme ausgelöst werden.

Ob Sie es abfangen und erneut ausgeben sollten, ist die Antwort ja, aber nur, wenn Sie die Ausnahme sofort im Setter bearbeiten müssen, bevor Sie den Stack überholen ...aber das Loggen ist kein Grund, das zu tun. Im Allgemeinen sollten Sie eine übergreifende Protokollierung von Ausnahmen auf einer höheren Ebene implementieren, wobei die Ausnahme NICHT erneut ausgelöst wird ... wenn Sie sich um diese übergreifenden Probleme kümmern, die irgendwo auf dem Stapel liegen, dann nein , fange und werfe die selbe Ausnahme definitiv nicht auf. Wenn Sie jedoch ein Tool oder eine Framework-Bibliothek schreiben, möchten Sie, dass die Clients Ihrer Komponente über eine klar definierte Menge erwarteter Ausnahmen verfügen, und Sie haben eigene benutzerdefinierte Ausnahmen definiert, die von Ihrer Komponente an den Client-Code übergeben werden und welche Client-Komponenten erwarten, dass Sie CLR-generierte Exceptions abfangen und stattdessen eigene benutzerdefinierte Exceptions erneut auslösen möchten. Fügen Sie die eigentliche zugrundeliegende Exception immer in Ihre benutzerdefinierten Exceptions "InnerException" -Eigenschaft ein, bevor Sie den Stack übergeben dass die Daten darin für jedes System verfügbar sind, das es verbraucht.

0

Fangen und erneutes Einwerfen ist das Schlimmste, was zu tun ist. Es ist teuer zu VERSUCHEN, wenn youre nur, was der Punkt neu zu werfen? Sie können catch unhandled exceptions with the global.asax zum Beispiel, wenn Sie sie protokollieren müssen.

In Bezug auf die Validierung von einer Web-Perspektive i immer regex Validierer für Daten verwenden, diese Feuer Client- und Server-Seite, damit ich weiß, wenn im Inneren eines

if(Page.IsValid) 

Block, mein txtDate.Text eine gültige Datum, also prüfe ich nicht, weil es gerade verschwenderisch ist.

4

Es hängt von der spezifischen Aufgabe ab. Wenn Sie eine Bibliotheksklasse schreiben, die als Komponente in anderen Programmen verwendet wird, und der Vertrag der Methode der Klasse besagt, dass sie nur gültige Daten akzeptieren soll, dann ist das Auslösen der Ausnahme in Ordnung.

Wenn Sie Benutzereingaben akzeptieren und dann auf eine Ausnahme warten, ist dies eine schlechte Vorgehensweise. In diesem Fall sollten Sie das Datum selbst validieren.

Ausnahmen sind für Ausnahmefälle und sollten nicht Teil Ihrer Logik sein. Es bedeutet normalerweise, dass ein Vertrag vom Programmierer gebrochen wurde.

1

Es hängt wirklich von der Logik Ihrer Anwendung ab. Ausnahmen sollten nur für Fälle geworfen werden, die Ausnahme sind. Für etwas wie Validierung hängt es von der Toleranz für ungültige Daten ab.

Wenn Sie eine interaktive Anwendung erstellen und der Benutzer etwas eingeben kann, ist es wahrscheinlich in Ordnung, dass das Dokument in einen ungültigen Status versetzt wird und Sie Validierungsinformationen über Eigenschaften der Dokumentklasse verfügbar machen sollten.

Wenn Sie vorbereitete Dokumente aus einer Datenbank oder einer Protokolldatei verarbeiten, ist es wahrscheinlich nicht in Ordnung, dass das Dokument ungültig ist und weiterhin ausgeführt wird, da dies die Daten im System beschädigen könnte. Wenn das passiert, solltest du werfen.

2

Ich denke, es hängt davon ab, wo die Datumswerte herkommen. Wenn es von Benutzereingaben oder anderen Quellen kommt, bei denen es durchaus möglich ist, 'ungültige' Daten einzugeben, dann wäre die Validierung der richtige Weg. Wenn es andererseits keinen vorhersehbaren Grund gibt, warum die Datenwerte ungültig sein könnten, ist das Auslösen einer Ausnahme angemessen.

Verwandte Themen