2012-05-14 21 views
14

एक कोड समीक्षा में एक सहकर्मी ने पैरामीटर के रूप में स्ट्रीम में पास करने के लिए अपना कोड बदल दिया। उन्होंने कहा कि यह सुनिश्चित करना था कि ऑब्जेक्ट का निपटान करने की ज़िम्मेदारी कॉलर को स्पष्ट है। एक मायने में मैं सहानुभूति व्यक्त कर सकता हूं। मैं ऑब्जेक्ट निर्माता को क्लीनअप के लिए ज़िम्मेदार भी पसंद करूंगा।क्या डिस्पोजेबल वस्तुओं को पारित किया जाना चाहिए?

दूसरी तरफ, न तो विधि using की आवश्यकता को और स्पष्ट करती है। मैं सरल विधि कॉल भी पसंद करता हूं।

public static TextReader Serialize<T>(T obj) where T: new() 
    { 
     if (obj == null) throw new ArgumentNullException("obj"); 
     return Serialize<T>(obj, null); 
    } 

वी.एस.

public static void Serialize<T>(T obj, TextWriter outbound) where T : new() 
    { 
     if (obj == null) throw new ArgumentNullException("obj"); 
     Serialize<T>(obj, outbound, null); 
    } 

ले लो वहाँ किसी भी तकनीकी अतिरिक्त परम जोड़ने के लिए कारण है?

+3

यदि हम .NET Framework से स्वयं का क्यू लेते हैं, उदाहरण के लिए, 'XmlSerializer', स्ट्रीम को पैरामीटर के रूप में पारित किया जाता है। – mellamokb

+0

http://codereview.stackexchange.com/ के लिए एक प्रश्न हो सकता है – MattDavey

उत्तर

9

यह आपके कोड आर्किटेक्चर पर सख्ती से निर्भर करता है।

मैं व्यक्तिगत रूप से, दूसरा दृष्टिकोण की तरह (भले ही वह एक और तर्क कहते हैं) जहां परिभाषा समारोह केराज्यों है कि यह बंद नहीं/एक धारा निपटान होगा, लेकिन यह कॉलर पर निर्भर है।

यह एक बहुत ही उपयोगी है जब आप एक ही स्ट्रीम पर एक ही फ़ंक्शन को कॉल करने जा रहे हैं, अगर आप कल्पना करते हैं कि प्रत्येक फ़ंक्शन कॉल स्ट्रीम बंद कर देगा और फिर से खोल देगा, तो यह संसाधन उपभोग करने वाला ऑपरेशन बन जाएगा।

4

आपके पास पहले से ही एक टेक्स्टवाइटर खुला हो सकता है। यही कारण है कि मैं दूसरा संस्करण पसंद करूंगा। इसके अलावा, यह सीरियलाइज विधि के दायरे को कम करता है: यह क्रमबद्ध है, लेकिन यह कुछ भी नहीं खोलता है। खोलना एक अलग चिंता है।

0

ओवरलोडेड सीरियलज-टी विधि स्ट्रीम बनाता है? अगर ऐसी बात है मैं # 1 पसंद करते हैं क्योंकि यह सरल 'का उपयोग' बनाता है:

using (var stream = Serialize(a_T))) 
{ 
    // Do something else with the stream? 
} 

दूसरी ओर, यह फोन करने वाले के लिए बेहतर हो सकता है धारा आपूर्ति करने के लिए, इस स्थिति में आप पारित करने के लिए करना चाहते हैं एक ला विकल्प 2.

1

में एक परियोजना विकसित होता है, प्रोग्रामर (रों) पहले दृष्टिकोण में कोड को बनाए रखने याद नहीं रख सकते हैं कि यह बुला कोड की जिम्मेदारी है धारा (विशेष रूप से गैर तुच्छ मामलों में) बंद करने के लिए के रूप में । कॉलर्स को सही काम करने के लिए प्रलेखन पर भरोसा करना होगा और हर कोई दस्तावेज़ीकरण पढ़ता है, है ना? ;)

दूसरा बेहतर "balances" resources दृष्टिकोण। यह बहुत स्पष्ट बनाता है जहां जिम्मेदारियों को अलग करना झूठ बोलता है।

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