Question

Je recherche une bibliothèque ou un code source fournissant des méthodes de protection, telles que la recherche d'arguments nuls. Évidemment, cela est plutôt simple à construire, mais je me demande s’il en existe déjà pour .NET. Une recherche Google de base n'a pas révélé grand chose.

Était-ce utile?

La solution

Il existe des CuttingEdge.Conditions . Exemple d'utilisation de la page:

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;
}

Une autre approche intéressante, qui n'est pas empaquetée dans une bibliothèque, mais pourrait facilement l'être, sur le blog Paint.Net :

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];
}

Je l'utilise dans mon projet et vous pouvez emprunter le code à partir de là.

Autres conseils

Étant donné que Contrats de code de Microsoft sortait avec .NET 4.0, j'essaierais d'en trouver un qui soit principalement compatible, si possible - et sinon, écrivez-le vous-même. Ainsi, lors de la mise à niveau vers .NET 4.0 (éventuellement), la migration sera plus facile.

Vous pouvez utiliser plusieurs méthodes.

Mon préféré utilise la programmation orientée aspect. Découvrez PostSharp.

Vous pouvez également consulter Spec #, une extension de C #

En 4.0, vous aurez une bibliothèque de contrats complète.

Enfin, un de mes collègues a mis au point une bibliothèque de garde très utile: http://blueonionsoftware.com/blog.aspx?p= ca49cb62-7ea2-43c5-96aa-91d11774fb48

Je n'en connais aucun qui soit disponible dans le commerce. Ce type de code est pris en charge dans les modèles & amp; pratiques Enterprise Library. De nombreux projets open source semblent également le faire (à des degrés divers) sur CodePlex: http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=validation .

La plupart du temps, ces types de bibliothèques finissent par être personnalisés et restent internes à la société qui les utilise.

Il existe un support dans .NET 4.0 pour fournir des mécanismes permettant de le faire en utilisant les Contrats de code , qui sont basés sur Spec #.

J'ai récemment écrit un article sur les classes de gardes (n'ayant trouvé aucune information non plus): http://ajdotnet.wordpress.com/2009/08/01/posting-guards-guard-classes-explained/

J'ai également publié une implémentation de classe Guard respective (n'hésitez pas à utiliser ce code tel quel ou à l'adapter à vos besoins): ajdotnet.wordpress.com/guard-class /

En ce qui concerne la relation entre les classes Guard et le contrat de code dans .NET 4.0 (successeur de Spec #), consultez le post suivant: www.leading-edge-dev.de/?p=438

(désolé pour les liens fragmentés, le site n'autorisait qu'un seul lien ...)

HIH, AJ.NET

Installez le paquet nuget netfx-guard. Vous obtenez également des extraits de code notnull et notempty, et cela fonctionne aussi vite que vos vérifications manuelles

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top