2012-02-19 22 views
15

मैं एक शर्त ढांचे के उपयोग शोध अंत मेरी पसंद या तो CodeContract या CuttingEdge.Conditions चौखटे उपयोग करने के लिए है मेंमुझे किस कोड का उपयोग करना चाहिए, CodeContract या CuttingEdge.Conditions?

if(cond) throw new SomeException(); 

SomeFramework.MakeSure(cond); 

के बजाय डेटा सत्यापित करने के लिए।

मैं तय नहीं कर सकता कि किस ढांचे का उपयोग करना है। मैं आपको बता सकता हूं कि मुझे 'कोडकंट्रैक्ट' ढांचे के बारे में क्या पसंद नहीं है, यह है कि इसे उपयोग करने के लिए आपको अतिरिक्त इंस्टॉल करना होगा और विकल्पों को चुनने के लिए आपको विकल्प चुनना होगा; यह बुरा नहीं है, लेकिन यह प्राकृतिक नहीं लगता है। (और निश्चित रूप से यह अभी भी एमएस शोध के तहत है।)

आपको क्या लगता है?

+0

खैर। – Tigran

+0

आपको परियोजना में एक लाइब्रेरी जोड़ने की आवश्यकता है जो पूरे वीएस – guyl

+0

पर एक एमएसआई नहीं है, दोनों मामलों में आप अपनी परियोजना में तीसरे पक्ष के डीएलएस में एक संदर्भ जोड़ते हैं। – Tigran

उत्तर

12

CodeContracts ढांचा .NET 4 का हिस्सा है। इसलिए आप कुछ भी स्थापित किए बिना इसके खिलाफ कोड लिख सकते हैं, यह सिर्फ इतना है कि पुन: लिखने वाले घटक के बिना कोड अनुबंधों को रनटाइम पर कोई प्रभाव नहीं पड़ेगा। मैं ढांचे में इस समावेश को एक संकेत के रूप में लेता हूं कि माइक्रोसॉफ्ट भविष्य में कोड अनुबंधों को और एकीकृत करने का इरादा रखता है।

CuttingEdge.Conditions CodePlex page पर आंकड़ों के मुताबिक, यह केवल 4,18 9 बार डाउनलोड किया गया है। वाक्यविन्यास के बारे में कुछ अच्छी चीजें हैं, लेकिन जब तक कुछ विशेष रूप से CuttingEdge.Conditions द्वारा समर्थित नहीं है और CodeContracts द्वारा नहीं, तो आप .NET का हिस्सा संस्करण के साथ भी चिपके रह सकते हैं।

  1. आप उन इंटरफेस को लागू प्रकार से अपेक्षित व्यवहार निर्दिष्ट करने के लिए इंटरफेस पर कोड ठेके सेट कर सकते हैं,:

    कोड ठेके की प्रमुख विशेषताओं में, जहाँ तक मैं चिंतित हूँ, इस प्रकार हैं।

  2. कोड अनुबंध विरासत में मिला है।

मैं CuttingEdge.Conditions प्रयास नहीं किया है, लेकिन यह है कि यह इन दो सुविधाओं का समर्थन करता (जबकि CodeContracts करता है) स्पष्ट नहीं है।

10

मुख्य अंतर यह है कि कोड अनुबंधों में एक स्थिर चेकर शामिल है। इसका मतलब है कि आपके अनुबंधों को शुद्धता के लिए संकलन समय पर चेक किया जाएगा।

इसके अलावा, जब तक आप .NET 4 के लिए निर्माण कर रहे हैं, तो आपके उपयोगकर्ताओं को कुछ भी इंस्टॉल करने की आवश्यकता नहीं है। पुनर्विक्रेता संकलन समय पर काम करता है और शेष सीसी .NET का हिस्सा है।

+1

वाह - "अब केवल एक संस्करण है जो विजुअल स्टूडियो (एक्सप्रेस को छोड़कर) के प्रत्येक संस्करण के साथ काम करता है और इसमें स्थिर चेकर भी शामिल है!" तो यह अब उस सुविधा के लिए अंतिम नहीं है! :) – TrueWill

+1

क्या आप निश्चित हैं, जैसा कि मुझे 'अनुबंध' काम करने के लिए पता है (आईएल डालें) आपको अभी भी एमएसआई स्थापित करने और पुनर्लेखक सेट करने की आवश्यकता है? – guyl

+5

@guyl: हाँ, लेकिन केवल कोड बनाने वाली मशीन को इसे स्थापित करने की आवश्यकता है। एक बार डीएलएल को फिर से लिखने के बाद, आप कोड संविदाओं के बिना किसी भी मशीन पर उन्हें चला सकते हैं। – porges

5

संपादित: मेरा सुझाव है लोगों https://github.com/adamralph/liteguard

CuttingEdge.Conditions का उपयोग सिर्फ स्थितियां बनने के लिए काँटेदार किया गया है। मूल लेखक अब इस परियोजना को बनाए रखने और न ही उपयोग कर रहा था: https://conditions.codeplex.com/workitem/20064

मोनो में कोडकंट्रैक्ट लागू नहीं किए गए हैं। एक जीएसओसी प्रोजेक्ट था लेकिन यह एक पूर्ण समाधान के साथ समाप्त नहीं हुआ था, इसलिए Xamarin.iOS/Xamarin.Android/Xamarin.Mac प्लेटफ़ॉर्म या सामान्य रूप से केवल मोनो को लक्षित करते समय स्थितियां आपकी एकमात्र पसंद हैं।

पुस्तकालय अब है एक पोर्टेबल वर्ग पुस्तकालय और डिफ़ॉल्ट रूप से पार मंच समर्थन में है: CuttingEdge.Conditions` आप भी सामान स्थापित करने की आवश्यकता `के लिए,

https://github.com/ghuntley/Conditions और https://www.nuget.org/packages/Conditions/

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