Wird es als schlechte Praxis angesehen, NotImplementedException
Code zu werfen , den Sie noch nicht geschrieben haben? Möglicherweise wären TODO-Kommentare sicherer?
Wird es als schlechte Praxis angesehen, NotImplementedException
Code zu werfen , den Sie noch nicht geschrieben haben? Möglicherweise wären TODO-Kommentare sicherer?
Antworten:
Ich glaube, das NotImplementedException
ist eine gute Praxis.
Wenn Sie vergessen, eine Methode zu implementieren, und Sie sie später in Ihrem Projekt verwenden (und glauben Sie mir, es passiert), verbringen Sie möglicherweise viel Zeit mit der Fehlersuche, um herauszufinden, was Schritt für Schritt schief gelaufen ist. Wenn Sie die Ausnahme haben, stoppt das Programm direkt und fordert die Ausnahme auf (wenn Sie die Ausnahme abfangen, finden Sie sie schnell, indem Sie nach der Ausnahme suchen, die Sie abgefangen haben).
Ich würde empfehlen, die mit TODO NotImplementedException
kombinierten Kommentare zu verwenden, um die GUI-Hilfe (mit den Aufgaben in VS) und die Programmsicherheit zu kombinieren.
Für die Release-Version ist es meiner Meinung nach sogar noch wichtiger, da Sie es in den meisten Fällen vorziehen, wenn Ihr Programm abstürzt, anstatt dass ein Programm anscheinend ordnungsgemäß funktioniert, aber fehlerhafte Ergebnisse liefert.
NotImplementedException
s wie in TODO-Kommentaren angezeigt . Ich finde das eine nette Funktion.
Es hängt von Ihrer allgemeinen Philosophie in Bezug auf Fehler und Fehlerbehandlung ab. Ich bin der "harte Fehler" -Typ: Ich werde beim geringsten Hinweis darauf, dass etwas nicht stimmt, eine Ausnahme auslösen. Ich werde alles behaupten; Wenn es einen Fehler gibt, wenn erwartet wurde, dass etwas da ist und es nicht ist oder wenn etwas da ist und es nicht sollte, muss das gesamte Universum aufhören. Das Ausrufezeichen des Fensters muss unheilvoll über die Lautsprecher klingeln.
Es gibt andere Leute, die sich lieber nicht mit Fehlern belästigen lassen. Was ist, wenn wir es an den Client senden und das gesamte Berichtsmodul fehlt, weil wir vergessen haben, es zu codieren, und niemand beim Testen es bemerkt hat, weil die Anwendung zu leise darüber war? Tun Sie lieber nichts, als dem Kunden eine Ausnahme ins Gesicht zu werfen!
Ich würde sagen, es ist eine gute Idee. Normalerweise sehe ich diese Ausnahmen, die durch einen Code ausgelöst werden, der automatisch aus einem Formular oder Diagramm oder etwas anderem generiert wird. Die Ausnahme erinnert mich daran, den Code zu implementieren, und stellt sicher, dass Fehler auftreten, wenn ich versuche, die Funktionalität zu verwenden, die eingerichtet wurde, aber nie vollständig implementiert wurde. Manchmal stoppe ich es oder ersetze es durch etwas, bei dem die Ausführung weniger wahrscheinlich ist (z. B. das Drucken einer Warnung an die Konsole), aber ich stelle fest, dass es für mich funktioniert.
Wenn Sie eine Bibliothek erstellen, die von anderen verwendet wird, ist diese Ausnahme besser als die Alternative, bei der ein Benutzer Ihrer Bibliothek eine Funktion aufruft und sich fragt, warum anscheinend nichts passiert. Natürlich ist es immer noch ziemlich schlimm, diese Ausnahme in einer ausgelieferten Bibliothek zu haben, aber besser als stille Fehler, IMO.
Ich denke, es ist eine gute Übung. Die Alternative ist die Weitergabe eines ungültigen Werts oder Status, der sich sowohl auf den Test- als auch auf den Produktionscode auswirkt.
Ich benutze immer NotImplementedException
- dafür ist es schließlich.
Dies hängt mit dem Konzept des schnellen Ausfalls zusammen: Wenn Ihr Code eine Ausnahme auslöst, sollte diese abgefangen werden, bevor Sie in die Produktion gehen. Wenn es zur Produktion kommt, dann weiß zumindest der Kunde, dass die Montage nicht korrekt ist .
Wenn der Code einen bedeutungslosen Wert zurückgibt oder für void
Methoden keine Aktion ausführt, denken die Benutzer Ihres Codes möglicherweise, dass der Aufruf sinnvoll war, als er nicht war. Wenn sie dann später einen korrekten Code erhalten, kann dieser Code beschädigt werden, da er vom früheren falschen Verhalten abhängt.
Was für ein Projekt ist das? Arbeit oder zu Hause? Machen Sie zu Hause, was Sie wollen - was Sie am besten daran erinnert, dass Sie fertig sein müssen, woran Sie gerade arbeiten.
Schreibe es bei der Arbeit zu Ende.
Ich kann keine Situation sehen, in der ich Code einchecken würde, der andere Entwickler, QA oder einen Build beschädigen kann / wird.
Ich mache beides ich mache aber ein \ todo in meinem doxygene autodocing und werfe dann die ausnahme. Auf diese Weise können Leute, die sich nicht um RTFM kümmern müssen, herausfinden, warum ihr Programm abgestürzt ist, anstatt sich zu fragen, warum es eine deklarierte Funktion gibt, die keinen logischen Wert zurückgibt.