4 Stimmen

Der beste Weg, um Vor- und Nachbedingung von Argumenten und Werten in .NET zu behaupten?

Ich habe in letzter Zeit über Design by Contract nachgedacht und ich frage mich, was die Leute denken, ist der beste Weg, um Pre-Condition und Post-Condition von Werten in .NET zu behaupten? d.h. die Validierung von Argumentwerten für eine Methode.

Einige empfehlen Debug.Assert, während andere von einer if-Anweisung und dem Auslösen einer Ausnahme sprechen. Was sind die Vor- und Nachteile der einzelnen Methoden?

Welche Frameworks sind verfügbar, die Sie empfehlen?

3voto

Cameron MacFarland Punkte 67889

Eine weitere Möglichkeit ist Spec# .

Spec# ist eine Erweiterung der objektorientierten Sprache C#. Es erweitert das Typsystem um Nicht-Null-Typen und geprüfte Ausnahmen. Es bietet Methodenverträge in Form von Vor- und Nachbedingungen sowie Objektinvarianten.

0 Stimmen

Spec# ist perfekt für diese Art von Sachen, wenn Sie es in Ihre Build-Umgebung bekommen können.

3voto

Jeff Moser Punkte 19228

Wir werden Code Contracts schließlich verwenden, wenn .NET 4.0 ausgeliefert wird. In unserem aktuellen Produktionscode haben wir jedoch großen Erfolg mit einer "Guard"-Klasse und einer gemeinsamen Methode zur Erzeugung von Ausnahmen.

Für weitere Einzelheiten siehe mein Beitrag dazu .

1voto

Jeff Yates Punkte 59874

Ich bevorzuge Ausnahmen gegenüber Asserts, denn wenn es so sein soll und nicht ist, möchte ich es wissen, damit ich es beheben kann, und die Abdeckung, die wir im Debug-Modus erhalten, ist nicht annähernd die reale Nutzung oder Abdeckung, so dass nur mit Debug.Assert nicht genug tun.

Die Verwendung von Asserts bedeutet, dass Sie Ihren Code nicht aufblähen, aber es bedeutet, dass Sie nur sehen können, wann und warum diese Verträge gebrochen werden, wenn Sie sie in einem Debug-Build abfangen.

Die Verwendung von Ausnahmen bedeutet, dass Sie den Vertragsbruch sehen können, wann immer er auftritt, sei es beim Debuggen oder bei der Veröffentlichung, aber es bedeutet auch, dass Ihr Release-Build mehr Prüfungen und Code enthält.

Sie könnten einen Zwischenweg einschlagen und Trace verwenden, um Ihre Vor- und Nachbedingungen in einer Art Anwendungsprotokoll festzuhalten, das Sie zur Fehlersuche verwenden könnten. Sie bräuchten jedoch eine Möglichkeit, diese Protokolle auszuwerten, um zu erfahren, welche Probleme bei Ihren Benutzern auftreten. Es besteht auch die Möglichkeit, dies mit Ausnahmen zu kombinieren, so dass Sie Ausnahmen für die schwerwiegenderen Probleme erhalten.

Die Art und Weise, wie ich es aber sehe, ist, dass, wenn der Vertrag wert ist durchzusetzen, dann ist es wert, eine Ausnahme zu werfen, wenn es bricht. Ich denke, das ist eine Frage der Meinung und der Zielanwendung. Wenn Sie Ausnahmen auslösen, möchten Sie wahrscheinlich eine Form von Ereignisberichtssystem, das Absturzberichte liefert, wenn ausgelöste Ausnahmen unbehandelt bleiben.

0 Stimmen

Im Allgemeinen beinhaltet die Idee hinter einer guten DBC-Lösung eine Kompilierzeitüberprüfung von Post- und Pre-Bedingungen, wodurch Sie eine engere Rückkopplungsschleife über Ausnahmen erhalten.

1voto

JML Punkte 360

Sie können sich das Fluent Framework ansehen unter http://conditions.codeplex.com/ Es ist quelloffen und kostenlos.

0voto

Hao Wooi Lim Punkte 3848

Spec#, eine Obermenge von C#, ist der richtige Weg dazu. Jetzt haben Sie " Code Verträge "Das ist die sprachunabhängige Version von Spec#, so dass Sie jetzt z. B. Codeverträge in VB.NET haben können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X