Frage

Ich versuche, den besten Weg, um Ausnahmen von der Handhabung, um herauszufinden, habe ich eine Reihe von Schichten mit meiner Bewerbung und begann also einen Rückgabetyp BOOL zu verwenden, wenn es dann falsch ausfällt zurückkehren und wenn es wahr gelingt zurückkehren ..

Dies funktioniert gut in Methoden wie SaveMyRecord (somerecord); wie ich in Wert bin vorbei und muß nicht alles zurückgeführt, so kann ich den Rückgabetyp bool verwenden, um anzuzeigen, ob es oder nicht erfolgreich ist.

Aber dann wurde es mir zu denken, dass Dinge wie GetMyRecord () Art von IQueryable tatsächlich gibt daher kann ich keine bool verwenden, um mir zu sagen, wenn es fehlgeschlagen ist oder nicht.

Die Sache ist, ich bin eine Menge meiner Fehler behandeln, wo sie mit Versuch und fängt passieren und daher will nicht den Client eine Ausnahme erhalten.

Vielleicht ein besserer Weg ist, ich habe dann darüber nachzudenken Parametern OUT aber dies bedeutet i die Unterschrift aller Methoden ändern müssen und fügen aditional params ..

Vielleicht sollte ich die Ausnahme an den Client werden vorbei zurück und Handhabungs es da?

Gibt es einige Normen oder Dokumente Best Practices adivse?

War es hilfreich?

Lösung

Bubble up die Ausnahme an den Client und behandelt es dort. Auf jeden Fall geben sie in allen Einzelheiten den ganzen Weg nach oben. Die meisten Best Practices fast ausschließlich auf zustimmen, immer endlich auf dem Umfang zu verarbeiten, in diesem Fall hat den Auftraggeber, wenn auch in anderen Fällen, dass ein Web-Service sein könnte.

fangen Nur , wenn Sie auf log es Weitere Informationen hinzufügen , um es oder versuchen und wiederherstellen aus eine besondere Ausnahme. In jedem Fall werden Sie das Original wie eine neue Ausnahme mit dem Original als inneren oder einfach ‚werfen‘ entweder werfen, und wie in den Kommentaren nicht ‚throw ex‘ spitz

Diese Frage ist ein in der Nähe von doppelten , und Sie würden viele bestehenden sehr gut beantwortet Fragen auf SO finden. Ich antwortete eine ähnlich einer nur gestern

Andere Tipps

Sie sollten anfangen zu lesen Design-Richtlinien für Ausnahmen

Dann je nach Szenario, sollten Sie andere Überlegungen berücksichtigen wie Exception Abschirmung.

Zum Beispiel: Wenn Sie Web-Service verwenden (ASMX oder WCF) als Back-End, können Sie einen Blick nehmen wollen? Verbesserung der Sicherheit von Web Services und die Teile über die Ausnahmebehandlung lesen.

Wenn eine Methode nicht tun kann, es ist Arbeit, sollte es eine Ausnahme werfen. Nie wieder zurückkehren, eine Ausnahme als Ergebnis.

Der Ansatz, der eine bewährte Methode empfohlen und in Betracht gezogen wird, ist Ausnahme zu verwenden. Sie können (und sollten) lesen Sie die Framework Design Guidelines (2. Aufl.) , die Richtlinien für die Ausnahmen und das try-Parse-Muster hat.

Es gibt ein paar Probleme mit der Verwendung von Rückgabecodes (entweder numerisch oder boolean), die beiden größten Wesen:

  • leicht übersehen / ignoriert von Programmierern.
  • Kann nicht in allen Situationen verwendet werden. Was passiert, wenn Ihr Konstruktor fehlschlägt? Es ist nicht möglich, dass Sie explizit einen Wert von einem Konstruktor zurückzukehren.

Was, wenn Ausnahmen zu behandeln, sollten Sie sie nur behandeln, wenn Sie etwas Sinnvolles über die Ausnahme tun. Das Problem mit immer Umgang mit Ausnahmen, damit die Client sie nie sieht, ist, dass Sie eine Ausnahmebehandlung können am Ende, die Sie nicht haben sollten, und mehr Probleme verursachen später (wie eigentlich zu verlieren Daten).

eine große Frage This!

Sie nicht für Ausnahmecode. Für den größten Teil so tun, als sie noch nie passiert. Ich sorge mich um Ausnahme an zwei Stellen: Fehlerrückmeldung an den Management-Benutzer und Ressourcen angezeigt (das heißt eine geöffnete Datei zu schließen, wenn eine Ausnahme throw)

.

Ein gemeinsames Muster MS zu mögen scheint, ist eine ComputeSomething () Methode verfügen, die ‚int‘ zurückkehrt, und eine TryComputingSomething () Methode, die einen Verweis auf eine ganze Zahl annimmt und Bool'sches. Letztere, wenn sie erfolgreich ist, speichert seine Berechnung in den übergebenen in Variable und gibt True zurück; wenn es für einen „erwarteten“ Grund fehlschlägt, wird False zurückgegeben. Beachten Sie, dass unerwartete Fehler in entweder Routine kann Ausnahmen auslösen.

In einigen Fällen kann es hilfreich sein, ein anderes Muster zu verwenden, und hat eine Routine ein Delegierten akzeptieren, um im Fall von Schwierigkeiten geltend gemacht werden. Das Delegierten könnte entweder eine Ausnahme zurückgeben, oder bewirken, dass die zugrunde liegende Routine falsch zurückzukehren, oder möglicherweise auch andere Dinge tun. Beachten Sie, dass zum Zeitpunkt des Delegat ausgeführt wird, werden Informationen zur Verfügung, die zerstört werden würde, bevor eine Ausnahme abgefangen werden kann. Wenn beispielsweise eine Routine sollen Zeilen aus einer Datei lesen und Zeichen 20-37 in ein Datum zu konvertieren, kann es hilfreich sein, die gesamte Eingabezeile zu protokollieren, wenn es ein Parsing-Fehler ist. Mit Hilfe eines übergebenen in delegieren, so könnte man das tun; ohne eine solche Sache, wäre es viel schwieriger sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top