Ich habe kürzlich angefangen, an einem Ort mit einigen viel älteren Entwicklern zu arbeiten (ungefähr 50+ Jahre alt). Sie haben an kritischen Anwendungen für die Luftfahrt gearbeitet, bei denen das System nicht ausfallen konnte. Infolgedessen neigt der ältere Programmierer dazu, auf diese Weise zu codieren.
Er neigt dazu, einen Booleschen Wert in die Objekte einzufügen, um anzuzeigen, ob eine Ausnahme ausgelöst werden soll oder nicht.
Beispiel
public class AreaCalculator
{
AreaCalculator(bool shouldThrowExceptions) { ... }
CalculateArea(int x, int y)
{
if(x < 0 || y < 0)
{
if(shouldThrowExceptions)
throwException;
else
return 0;
}
}
}
(In unserem Projekt kann die Methode fehlschlagen, da versucht wird, ein Netzwerkgerät zu verwenden, das zurzeit nicht vorhanden sein kann. Das Bereichsbeispiel ist nur ein Beispiel für das Ausnahmeflag.)
Für mich scheint das ein Codegeruch zu sein. Das Schreiben von Komponententests wird etwas komplexer, da Sie jedes Mal auf das Ausnahmeflag prüfen müssen. Wenn etwas schief geht, möchten Sie es dann nicht sofort wissen? Sollte es nicht die Verantwortung des Anrufers sein, festzulegen, wie fortgefahren werden soll?
Seine Logik / Argumentation ist, dass unser Programm 1 Sache tun muss, um dem Benutzer Daten zu zeigen. Jede andere Ausnahme, die uns nicht davon abhält, sollte ignoriert werden. Ich bin damit einverstanden, dass sie nicht ignoriert werden sollten, sondern in die Luft gejagt werden und von der entsprechenden Person gehandhabt werden sollten und dass sie dafür nicht mit Flaggen umgehen müssen.
Ist dies eine gute Möglichkeit, mit Ausnahmen umzugehen?
Bearbeiten : Um mehr Kontext über die Entwurfsentscheidung zu geben, vermute ich, dass dies daran liegt, dass das Programm bei einem Ausfall dieser Komponente weiterhin ausgeführt werden und seine Hauptaufgabe erfüllen kann. Daher möchten wir keine Ausnahme auslösen (und nicht damit umgehen?) Und das Programm herunterfahren, wenn es für den Benutzer einwandfrei funktioniert
Edit 2 : Um noch mehr Kontext zu geben, wird in unserem Fall die Methode aufgerufen, um eine Netzwerkkarte zurückzusetzen. Das Problem tritt auf, wenn die Netzwerkkarte getrennt und erneut verbunden wird und ihr eine andere IP-Adresse zugewiesen wird. Daher löst Zurücksetzen eine Ausnahme aus, da wir versuchen würden, die Hardware mit der alten IP zurückzusetzen.