मेरे पास कोड अनुबंधों के संबंध में कई प्रश्न हैं, और उनके उपयोग के लिए सर्वोत्तम अभ्यास हैं। कहते हैं कि चलो हम एक वर्ग है, कई गुणों के साथ है (उदाहरण के लिए नीचे देखें):कोड अनुबंध सर्वोत्तम अभ्यास
class Class1
{
// Fields
private string _property1; //Required for usage
private List<object> _property2; //Not required for usage
// Properties
public string Property1
{
get
{
return this._property1;
}
set
{
Contract.Requires(value != null);
this._property1 = value;
}
}
public List<object> Property2
{
get
{
return this._property2;
}
set
{
Contract.Requires(value != null);
this._property2 = value;
}
}
public Class1(string property1, List<object> property2)
{
Contract.Requires(property1 != null);
Contract.Requires(property2 != null);
this.Property1 = property1;
this.Property2 = property2;
}
public Class1(string property1)
: this(property1, new List<object>())
{ }
}
कुछ स्पष्टीकरण मैं क्या हासिल करना चाहते के बारे में:
(क) property1 एक आवश्यक फ़ील्ड है। वस्तु 2 के सामान्य उपयोग के लिए संपत्ति 2 स्पष्ट रूप से आवश्यक नहीं है।
मैं निम्नलिखित प्रश्न हैं:
मैं भी property2 के लिए अनुबंध से परेशान करना चाहिए; क्योंकि property2 एक आवश्यक फ़ील्ड नहीं है, क्या इसका अनुबंध होना चाहिए। संपत्ति 2 पर अनुबंध रखने से संकेत मिलता है कि यह वास्तव में वस्तु के सामान्य उपयोग के लिए आवश्यक है;
हालांकि property2 स्पष्ट रूप से की आवश्यकता नहीं है, वहाँ यह शून्य होने के लिए कोई संभावित कारण यह है सेटर पर इस प्रकार परिभाषित किया गया अनुबंध है। संपत्ति 2 पर अनुबंध को परिभाषित नहीं करना कॉलिंग कोड में शून्य जांच को कम करेगा? यह बग को कम करना चाहिए और कोड की रखरखाव में सुधार करना चाहिए - क्या यह धारणा सही है?
यदि यह सही है, मैं कैसे कोड है कि property2 अशक्त कभी नहीं होगा बुला कर यह सुनिश्चित करते हैं? क्या मैं Contract.Invariant (property2! = Null) का उपयोग करता हूं; या अनुबंध.इन्चर (प्रॉपर्टी 2! = नल) कन्स्ट्रक्टर, या कॉन्ट्रैक्ट। इंश्योरेंस (प्रॉपर्टी 2! = नल) इनिट(), या कॉन्ट्रैक्ट में। एंटर (प्रॉपर्टी! = नल) सेटर में? (यानी अगर अनुबंध.इन्सर्स (property2! = null) का उपयोग करते हैं, तो यह कहां रखा जाता है)?
मेरी माफी माँगती है अगर प्रश्न सरल लगते हैं। मैं सिर्फ इस मामले पर विचारों की तलाश में हूं, और आप जो लोग सबसे अच्छा अभ्यास मानते हैं।
मैं कारणों से आप सूचीबद्ध के लिए संपत्ति 2 पर अनुबंध के साथ सहमत हैं। –