Ich wäre so defensiv wie du sein musst. Ein bisschen mehrdeutig, denke ich, aber ich werde versuchen zu erklären.
Wenn Sie eine Methode korrigieren und über Eingabeparameter verfügen, müssen Sie entscheiden, wie diese Parameter aussehen sollen. In Situationen und Orten innerhalb einer Anwendung ist dies unterschiedlich. Wenn beispielsweise eine Methode oder ein Code Daten von einer Benutzereingabe akzeptiert, möchten Sie die gesamte Codebasis abdecken und alle Eingaben entsprechend behandeln, sei es über eine Fehlermeldung oder eine nette Art der Anzeige nicht akzeptabler Daten.
Wenn die Methode eine exponierte API ist, ebenso. Sie können nicht steuern, was hereinkommt, daher sollten Sie damit rechnen, alle Aspekte abzudecken und entsprechend zu programmieren.
Für Methoden, die innerhalb der Kern-Engine Ihres Projekts erstellt werden, müssen Sie hier eine Entscheidung treffen. Nehme ich an, dass die eingehenden Daten vor dem Eintreffen vorab überprüft und validiert wurden, oder sollte ich die erforderlichen Überprüfungen durchführen? Ich denke, dies hängt von der konzeptionellen Ebene der Methode ab und davon, ob dies ein akzeptabler Ort ist, um dies zu überprüfen. Dinge, die ich in Betracht ziehen könnte, sind:
1) Ist dies der einzige Ort, an dem ich diese Prüfung durchführen muss? Muss diese Variable an vielen verschiedenen Stellen auf diese Bedingung überprüft werden? Wenn ja, kann ich die Prüfung einmal weiter oben in der Kette durchführen und anschließend die Gültigkeit übernehmen
2) Wird erwartet, dass andere Komponenten des Systems mit den von mir geschriebenen Methoden und Schnittstellen funktionieren? Wenn ja, können Sie durch Debug-Assert-Anweisungen, Debugging-Ausnahmen, Methodenkommentare und allgemeine Systemarchitektur das gewünschte Ergebnis steuern oder müssen die Daten überprüft werden.
3) Was sind die Ergebnisse eines Fehlers an dieser Stelle im Code? Wird es das Ganze zum Scheitern bringen? Wird ein Fehler an anderer Stelle abgefangen und wird dieser Fehler zumindest abgefangen?
4) Ist es sinnvoll, hier einen Scheck zu setzen? Manchmal hilft es, eine Überprüfung möglicher beschädigter Daten durchzuführen, obwohl es hilfreich ist, das Problem zu diesem Zeitpunkt zu lösen und keine Fehler zu beheben. Zu diesem Zeitpunkt könnten Sie Stunden damit verbringen, ein anderes Problem aufzuspüren, nur um das tatsächliche Problem zu finden. Dies lag an einer gültigen Überprüfung der Daten in der Ereigniskette, die an das vom Benutzer / Entwickler gemeldete Problem weitergegeben wurde.
Im Allgemeinen bin ich ein defensiver Programmierer, aber ich glaube auch, dass Sie mit gründlichen TDD- und geeigneten Unit-Tests die Code-Checks auf den erforderlichen Ebenen einfügen können und sicher sein können, dass es so funktioniert, wie es sollte, sobald es zu niedrigeren Abschnitten gelangt .