Der beste Weg, um die Voraussetzung und Nachbedingung von Argumenten und Werten in .NET geltend zu machen?

StackOverflow https://stackoverflow.com/questions/155422

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe in letzter Zeit über ein Vertrag nach dem Vertrag nachgedacht und habe mich gefragt, was die Leute für den besten Weg für die Voraussetzung und Nachbedingung der Werte in .NET halten? dh validierende Argumentwerte für eine Methode.

Einige Leute empfehlen Debug.assert, während andere über die Verwendung einer IF -Erklärung und einer Ausnahme sprechen. Was sind die Vor- und Nachteile von jedem?

Welche Frameworks gibt es, die Sie empfehlen?

War es hilfreich?

Lösung

Wir werden irgendwann Codeverträge verwenden, wenn .NET 4.0 ausschifft. In unserem Produktionscode haben wir jedoch große Erfolge mit einer "Wachkurs" zusammen mit gemeinsamen Möglichkeiten, Ausnahmen zu generieren.

Weitere Informationen finden Sie unter Mein Beitrag darüber.

Andere Tipps

Eine andere Option ist Spec#.

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

Ich bevorzuge Ausnahmen über Behauptungen, denn wenn es so sein soll und nicht, möchte ich davon wissen, dass ich es beheben kann, und die Berichterstattung, die wir im Debug-Modus erhalten Die Verwendung von debug.assert tut nicht genug.

Wenn Sie Asserts verwenden, werden Sie Ihrem Release -Code nicht aufblähen. Dies bedeutet jedoch, dass Sie nur sehen können, wann und warum diese Verträge kaputt gehen, wenn Sie sie in einem Debug -Build anfangen.

Wenn Sie Ausnahmen verwenden, können Sie das Vertragsbruch sehen, wenn es passiert, debuggen oder veröffentlichen, aber dies bedeutet auch, dass Ihr Release -Build mehr Schecks und Code enthält.

Sie können einen Zwischenansatz verwenden und Trace verwenden, um Ihre Pre- und Post -Bedingungen für eine Art Anwendungsprotokoll zu verfolgen, mit denen Sie Probleme debuggen. Sie benötigen jedoch eine Möglichkeit, diese Protokolle zu ernten, um zu erfahren, auf welche Probleme Ihre Benutzer begegnen. Es besteht auch die Möglichkeit, dies mit Ausnahmen zu kämmen, sodass Sie Ausnahmen für schwerwiegendere Probleme erhalten.

Die Art und Weise, wie ich es sehe, ist, dass es sich lohnt, eine Ausnahme zu machen, wenn der Vertrag durchgesetzt wird, wenn er bricht. Ich denke, das ist jedoch etwas bis zur Meinung und der Zielanwendung zurückzuführen. Wenn Sie Ausnahmen werfen, möchten Sie wahrscheinlich eine Form von Vorfallberichtssystem, die Crash -Berichte bereitstellt, wenn erhöhte Ausnahmen unberechtigt bleiben.

Sie könnten sich das fließende Gerüst ansehen http://conditions.codeplex.com/Seine Open Source und kostenlos.

Spec# ist der Weg, es zu tun, was ein Superset von C# ist. Jetzt hast du "Codeverträge"Das ist die Sprach-Agnostische Version von Spec#, sodass Sie beispielsweise Codeverträge in VB.NET abhalten können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top