2008-11-18 16 views
14

मैं एक पुस्तकालय या स्रोत कोड की तलाश में हूं जो शून्य विधियों की जांच के लिए गार्ड विधियों प्रदान करता है। स्पष्ट रूप से यह निर्माण करना आसान है, लेकिन मैं सोच रहा हूं कि .NET के लिए पहले से कोई बाहर है या नहीं। एक मूल Google खोज ने बहुत कुछ नहीं बताया।.NET गार्ड क्लास लाइब्रेरी?

उत्तर

11

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

एक और अच्छा दृष्टिकोण है, जो एक पुस्तकालय में पैक नहीं है, लेकिन आसानी से हो सकता है, on 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]; 
} 

मैं my project में इसका इस्तेमाल करते हैं और आप उधार ले सकता वहां से कोड।

+0

जितना तेज़ करता है, मैं इसे स्वीकृत उत्तर के रूप में चिह्नित कर रहा हूं क्योंकि यह निश्चित रूप से मेरी आवश्यकताओं के अनुरूप है। –

8

माइक्रोसॉफ्ट के Code Contracts को .NET 4.0 के साथ बाहर आने के कारण मैं एक ऐसा खोजने की कोशिश करता हूं जो अधिकतर संगत है, यदि संभव हो तो - और यदि नहीं, तो इसे स्वयं लिखें। इस तरह जब आप .NET 4.0 (अंततः) में अपग्रेड करते हैं तो माइग्रेशन आसान हो जाएगा।

2

कई विधियां हैं जिनका आप उपयोग कर सकते हैं।

मेरा पसंदीदा आस्पेक्ट ओरिएंटेड प्रोग्रामिंग का उपयोग कर रहा है। PostSharp देखें।

तुम भी युक्ति # पर एक नज़र ले जा सकते हैं, सी #

के लिए एक विस्तार 4.0 में, आप एक पूर्ण विशेषताओं अनुबंध पुस्तकालय होगा। http://blueonionsoftware.com/blog.aspx?p=ca49cb62-7ea2-43c5-96aa-91d11774fb48

1

मैं किसी भी है कि व्यावसायिक रूप से उपलब्ध हैं के बारे में पता नहीं है:

अंत में, मेरा एक सहयोगी एक बहुत उपयोगी गार्ड पुस्तकालय के साथ आ गया। पैटर्न & प्रथाओं एंटरप्राइज़ लाइब्रेरी में इस प्रकार के कोड के लिए कुछ समर्थन है। कोडप्लेक्स परपर भी कई खुली स्रोत परियोजनाएं हैं जो इसे (अलग-अलग डिग्री) करने के लिए दिखाई देती हैं।

अधिकांश समय, इस प्रकार के पुस्तकालयों को कस्टम लिखा जा रहा है और कंपनी का उपयोग करने वाले आंतरिक में रहना है।

Code Contracts का उपयोग करके ऐसा करने के लिए तंत्र प्रदान करने के लिए .NET 4.0 में समर्थन आ रहा है, जो SpeC# पर आधारित हैं।

1

मैं हाल ही में गार्ड कक्षाओं के बारे में एक पोस्ट में लिखा था (जो जानकारी या तो नहीं मिला था): 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

0

netfx-guard nuget पैकेज स्थापित करें।आपको कोड स्निपेट को कमजोर और अस्वीकार भी मिलता है, और यह आपके मैनुअल चेक

संबंधित मुद्दे