Pregunta

Estoy buscando una biblioteca o código fuente que proporcione métodos de protección, como la comprobación de argumentos nulos. Obviamente, esto es bastante simple de construir, pero me pregunto si ya hay alguno para .NET. Una búsqueda básica en Google no reveló mucho.

¿Fue útil?

Solución

Hay CuttingEdge.Conditions . Ejemplo de uso de la página:

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

Otro buen enfoque, que no está empaquetado en una biblioteca, pero podría ser fácilmente, en el 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];
}

Lo uso en mi proyecto y puede tomar prestado el código desde allí.

Otros consejos

Dado los Contratos de código de Microsoft que salen con .NET 4.0, trataría de encontrar uno que sea principalmente compatible, si es posible, y si no, escríbalo usted mismo. De esa manera, cuando actualice a .NET 4.0 (eventualmente) la migración será más fácil.

Hay varios métodos que puede usar.

Mi favorito es usar la Programación Orientada a Aspectos. Echa un vistazo a PostSharp.

También puede echar un vistazo a Spec #, una extensión de C #

En 4.0, tendrá una biblioteca de contrato con todas las funciones.

Finalmente, un colega mío ha creado una biblioteca de guardia bastante útil: http://blueonionsoftware.com/blog.aspx?p= ca49cb62-7ea2-43c5-96aa-91d11774fb48

No conozco ninguno que esté disponible comercialmente. Existe cierto soporte para este tipo de código en los patrones & amp; practica Enterprise Library. También hay muchos proyectos de código abierto que parecen hacer esto también (en diversos grados) en CodePlex: http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=validation .

La mayoría de las veces, estos tipos de bibliotecas terminan siendo escritos a medida y permanecen internos a la empresa que los usa.

Hay compatibilidad con .NET 4.0 para proporcionar mecanismos para hacer esto usando Contratos de código , que se basan en la especificación #.

Recientemente escribí una publicación sobre clases de guardia (sin haber encontrado ninguna información tampoco): http://ajdotnet.wordpress.com/2009/08/01/posting-guards-guard-classes-explained/

También publiqué una implementación de clase de Guardia respectiva (siéntase libre de usar este código tal como está o de ajustarlo a sus necesidades): ajdotnet.wordpress.com/guard-class/

Con respecto a la relación entre las clases de Guardia y el Contrato de Código en .NET 4.0 (sucesor de la Especificación #), eche un vistazo a la siguiente publicación: www.leading-edge-dev.de/?p=438

(perdón por los enlaces fragmentados, el sitio solo permitió un enlace ...)

HIH, AJ.NET

Instale el paquete nuget netfx-guard. También obtienes fragmentos de código nulos y con poca nota, y funciona tan rápido como tus comprobaciones manuales

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top