मैं लिखने का एक बहुत बड़ा प्रशंसक हूं, अनुबंध या जो भी प्रकार मैं जिस भाषा में उपयोग कर रहा हूं उसमें उपलब्ध चेक। एक चीज जो मुझे थोड़ा परेशान करती है, वह यह है कि मुझे यकीन नहीं है कि डुप्लिकेट चेक से निपटने के लिए सामान्य अभ्यास क्या है।
उदाहरण स्थिति: मैं पहली बार निम्नलिखित फ़ंक्शन लिखता हूं
void DoSomething( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
//code using obj
}
फिर कुछ घंटों बाद मैं एक और फ़ंक्शन लिखता हूं जो पहले कॉल करता है। जैसा कि सब कुछ अभी भी स्मृति में ताजा है, मैं अनुबंध को डुप्लिकेट नहीं करने का निर्णय लेता हूं, क्योंकि मुझे पता है कि DoSomethingपहले से ही एक अशक्त वस्तु के लिए wil चेक:
void DoSomethingElse( object obj )
{
//no Requires here: DoSomething will do that already
DoSomething( obj );
//code using obj
}
स्पष्ट समस्या: DoSomethingElseअब DoSomethingयह पुष्टि करने के लिए निर्भर करता है कि obj अशक्त नहीं है। तो DoSomethingकभी भी अब और नहीं जाँचने का निर्णय लेना चाहिए , या यदि मैं किसी अन्य फ़ंक्शन का उपयोग करने का निर्णय लेता हूँ तो शायद अब और जाँच नहीं की जाए। जो मुझे इस कार्यान्वयन को लिखने के लिए आगे ले जाता है:
void DoSomethingElse( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
DoSomething( obj );
//code using obj
}
हमेशा सुरक्षित, कोई चिंता नहीं, सिवाय इसके कि यदि स्थिति बढ़ती है तो एक ही वस्तु को कई बार जांचा जा सकता है और यह दोहराव का एक रूप है और हम सभी जानते हैं कि यह इतना अच्छा नहीं है।
इन जैसी स्थिति के लिए सबसे आम अभ्यास क्या है?
ArgumentBullException? यह एक नया है :)