سؤال

وأنا أبحث عن مكتبة أو مصدر التعليمات البرمجية التي توفر أساليب حارس مثل التحقق من وجود حجج فارغة. ومن الواضح أن هذا هو بسيط وليس لبناء، ولكن أنا أتساءل إذا كان هناك أي هناك ل. NET بالفعل. لم جوجل للبحث الأساسي لا تكشف الكثير.

هل كانت مفيدة؟

المحلول

وهناك CuttingEdge.Conditions . استخدام المثال من الصفحة:

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

ونهج لطيفة أخرى، التي لا تعبأ في مكتبة، ولكن يمكن أن يكون بسهولة، <وأ href = "http://blog.getpaint.net/2008/12/06/a-fluent-approach-to- ج-معلمة التحقق من صحة / "يختلط =" noreferrer "> على 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];
}

واستخدمه في مشروعي و هل يمكن أن تقترض رمز من هناك.

نصائح أخرى

ونظرا العقود كود مايكروسوفت والخروج مع NET 4.0 فما استقاموا لكم فاستقيموا محاولة العثور على واحد التي هي في معظمها متوافقة، إن أمكن - وإذا لم يكن، والكتابة عنها بنفسك. بهذه الطريقة عند الترقية إلى NET 4.0 (النهاية) سوف يكون من الأسهل الهجرة.

وهناك العديد من الأساليب التي يمكنك استخدامها.

والمفضلة يستخدم الجانب برمجة. تحقق من PostSharp.

ويمكنك أيضا أن نلقي نظرة على المواصفات #، امتدادا إلى C #

في 4.0، سيكون لديك مكتبة عقد كامل المواصفات.

وأخيرا، لقد حان الزملاء لي مع مكتبة حارس مفيدة جدا: http://blueonionsoftware.com/blog.aspx؟p= ca49cb62-7ea2-43c5-96aa-91d11774fb48

وأنا لا أعرف من أي المتوفرة تجاريا. هناك بعض الدعم لهذا النوع من التعليمات البرمجية في الأنماط والممارسات مكتبة المؤسسة. وهناك أيضا الكثير من المشاريع المفتوحة المصدر التي تظهر للقيام بذلك، وكذلك (بدرجات متفاوتة) على كود بلاكس: <لأ href = "http://www.codeplex.com/Project/ProjectDirectory.aspx؟ProjectSearchText=validation" يختلط = "نوفولو noreferrer"> http://www.codeplex.com/Project/ProjectDirectory.aspx؟ProjectSearchText=validation .

ومعظم الوقت، هذه الأنواع من المكتبات في نهاية المطاف يتم كتابتها العرف والبقاء الداخلية للشركة التي يستخدمها.

وهناك دعم القادمة. NET 4.0 إلى توفير آليات القيام بذلك باستخدام كود العقود ، التي تستند على المواصفات #.

وكتبت مؤخرا عن وظيفة حارس الطبقات (بعد أن يتم العثور على أي معلومات سواء): <وأ href = "http://ajdotnet.wordpress.com/2009/08/01/posting-guards-guard-classes-explained / "يختلط =" noreferrer نوفولو "> http://ajdotnet.wordpress.com/2009/08/01/posting-guards-guard-classes-explained/

وأنا أيضا نشر تطبيق فئة الحرس منهما (لا تتردد في استخدام هذا الرمز كما هو، أو تعديله وفقا لاحتياجاتك): ajdotnet.wordpress.com/guard-class /

وفيما يتعلق بالعلاقة بين الطبقات الحرس وعقد كود في. NET 4.0 (خليفة للمواصفات #)، إلقاء نظرة على هذا المنصب التالية: www.leading-edge-dev.de/؟p=438

و(آسف للروابط مجزأة، موقع يسمح فقط وصلة واحدة ...)

وHIH، AJ.NET

وتثبيت حزمة nuget netfx الحرس. تحصل أيضا كود قصاصات notnull وnotempty، وينفذ بأسرع الشيكات اليدوية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top