Frage

Ich suche nach einer Bibliothek oder Quellcode, der Wache Methoden wie Überprüfung auf null Argumente liefert. Natürlich ist dies relativ einfach zu bauen, aber ich frage mich, ob es einen gibt für .NET sind bereits. Eine grundlegende Google-Suche nicht viel verraten.

War es hilfreich?

Lösung

Es gibt CuttingEdge.Conditions . Anwendungsbeispiel von der Seite:

public ICollection GetData(Nullable<int> id, string xml, ICollection col)
{
    // Check all preconditions:
    id.Requires("id")
        .IsNotNull()          // throws ArgumentNullException on failure
        .IsInRange(1, 999)    // ArgumentOutOfRangeException on failure
        .IsNotEqualTo(128);   // throws ArgumentException on failure

    xml.Requires("xml")
        .StartsWith("<data>") // throws ArgumentException on failure
        .EndsWith("</data>"); // throws ArgumentException on failure

    col.Requires("col")
        .IsNotNull()          // throws ArgumentNullException on failure
        .IsEmpty();           // throws ArgumentException on failure

    // Do some work

    // Example: Call a method that should not return null
    object result = BuildResults(xml, col);

    // Check all postconditions:
    result.Ensures("result")
        .IsOfType(typeof(ICollection)); // throws PostconditionException on failure

    return (ICollection)result;
}

Ein weiterer netter Ansatz, der nicht in einer Bibliothek verpackt ist, aber könnte leicht sein, auf Paint.Net Blog :

public static void Copy<T>(T[] dst, long dstOffset, T[] src, long srcOffset, long length)
{
    Validate.Begin()
            .IsNotNull(dst, "dst")
            .IsNotNull(src, "src")
            .Check()
            .IsPositive(length)
            .IsIndexInRange(dst, dstOffset, "dstOffset")
            .IsIndexInRange(dst, dstOffset + length, "dstOffset + length")
            .IsIndexInRange(src, srcOffset, "srcOffset")
            .IsIndexInRange(src, srcOffset + length, "srcOffset + length")
            .Check();

    for (int di = dstOffset; di < dstOffset + length; ++di)
        dst[di] = src[di - dstOffset + srcOffset];
}

Ich benutze es in rel="noreferrer"> und man konnte den Code von dort ausleihen.

Andere Tipps

Bei -Code Contracts Microsoft 4.0 mit .NET kommen aus würde ich versuchen, einen zu finden, die meist ist kompatibel, falls möglich - und wenn nicht, schreiben sie es selber. Auf diese Weise, wenn Sie ein Upgrade auf .NET 4.0 (eventuell) die Migration einfacher sein wird.

Es gibt mehrere Methoden, die Sie verwenden können.

Mein Favorit ist mit Aspect Oriented Programming. Check out Postsharp.

Sie können auch einen Blick auf Spec # nehmen, eine Erweiterung auf C #

4,0, haben Sie eine voll funktionsfähigen Vertrag Bibliothek.

Schließlich ist ein Kollege von mir hat mit einer ziemlich nützlich Wache Bibliothek kommen: http://blueonionsoftware.com/blog.aspx?p= ca49cb62-7ea2-43c5-96aa-91d11774fb48

Ich weiß nicht jeder, die im Handel erhältlich sind. Es besteht eine gewisse Unterstützung für diese Art von Code in den Mustern und Praktiken Enterprise Library. Darüber hinaus gibt es viele Open-Source-Projekte, die dies auch erscheinen zu tun (in unterschiedlichem Ausmaß) auf CodePlex: http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=validation .

Die meisten der Zeit, diese Arten von Bibliotheken am Ende wird benutzerdefinierte geschrieben und bleiben innerhalb des Unternehmens, die sie verwendet.

Es ist .NET 4.0-Unterstützung in der kommenden Mechanismen zu schaffen, diese unter Verwendung von -Code Contracts tun , die basiert auf Spec #.

Vor kurzem habe ich einen Beitrag über Wache Klassen geschrieben (keine Informationen entweder gefunden zu haben): http://ajdotnet.wordpress.com/2009/08/01/posting-guards-guard-classes-explained/

Ich veröffentlichte auch einen entsprechenden Schutz-Klasse Implementierung (fühlen sich frei, diesen Code zu verwenden, wie es ist, oder es an Ihre Bedürfnisse anpassen): ajdotnet.wordpress.com/guard-class /

Im Hinblick auf die Beziehung zwischen Schutz Klassen und Code-Vertrag in .NET 4.0 (Nachfolger Spec #), hat einen Blick auf dem folgenden Beitrag: www.leading-edge-dev.de/?p=438

(sorry für die fragmentierte Links, erlaubt die Seite nur eine Verbindung ...)

HIH, AJ.NET

Installieren Sie das netfx-guard nuget Paket. Sie erhalten auch Code-Schnipsel notnull und notempty, und führt so schnell wie Ihre manuellen Prüfungen

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