Ich wollte eine solide Antwort auf die Frage finden, ob Laufzeitprüfungen durchgeführt werden sollen, um Eingaben zu validieren, um sicherzustellen, dass ein Kunde das vertraglich festgelegte Ende der Vereinbarung eingehalten hat. Stellen Sie sich zum Beispiel einen einfachen Klassenkonstruktor vor:
class Foo
{
public:
Foo( BarHandle bar )
{
FooHandle handle = GetFooHandle( bar );
if( handle == NULL ) {
throw std::exception( "invalid FooHandle" );
}
}
};
Ich würde in diesem Fall argumentieren, dass ein Benutzer nicht versuchen sollte, eine Foo
ohne eine gültige zu erstellen BarHandle
. Es scheint nicht richtig zu sein, zu überprüfen, ob dies bar
innerhalb des Foo
Konstruktors gültig ist . Wenn ich einfach dokumentiere, dass Foo
der Konstruktor eine gültige erfordert BarHandle
, ist das nicht genug? Ist dies ein angemessener Weg, um meine Vertragsvoraussetzungen vertraglich durchzusetzen?
Bisher hat alles, was ich gelesen habe, gemischte Meinungen dazu. Es scheint, als würden 50% der Leute sagen, dass sie überprüfen sollen, ob sie bar
gültig sind, die anderen 50% würden sagen, dass ich es nicht tun sollte. Betrachten Sie beispielsweise einen Fall, in dem der Benutzer überprüft, ob sie BarHandle
korrekt sind, aber eine zweite (und unnötige) Überprüfung wird auch innerhalb des Foo
Konstruktors ausgeführt.