2010-08-13 13 views
6

कुछ कोड को देख में WCF पुस्तकालयों से परिलक्षित होता है, मैं एक पैटर्न अपवाद बनाने के लिए इस्तेमाल दिखाई दे रही है:अपवाद कारखानों का मूल्य क्या है?

if(argument == null) 
{ 
    throw Error.ArgumentNull("argument"); 
} 

अशक्त तर्क स्थैतिक त्रुटि वर्ग के माध्यम से उपलब्ध अपवाद के अन्य प्रकार के साथ, सबसे सरल उदाहरण है।

इस कारखाने पैटर्न का मूल्य क्या है? new ऑपरेटर का उपयोग क्यों न करें और बस ArgumentNullException कन्स्ट्रक्टर को कॉल करें?

उत्तर

2

मुझे पता चला सबसे बड़ा कारण यह है कि किसी विशेष विकास टीम (या टीमों) के ढांचे के भीतर अपवादों को कैसे नियंत्रित किया जाता है और परिभाषित किया जाता है। यहां तक ​​कि माइक्रोसॉफ्ट भी प्रकाशित करता है कि विभिन्न अपवाद प्रकार अपवाद, सिस्टम अपवाद और अनुप्रयोग अपवाद के बीच विशेष रूप से मानक नहीं हैं। यह हो सकता है कि विशिष्ट तर्क मामलों को नियंत्रित करने वाले नियमों के आधार पर अपवाद की आवश्यकता अलग हो सकती है। यह डेवलपर की रोजमर्रा की चिंताओं से सामान्य कार्यों (जैसे लॉगिंग) को हटाने के लिए भी उपयोगी है। सभी डेवलपर को कारखाने में उपयुक्त अपवाद का उपयोग करना है और फैक्ट्री बाकी की देखभाल करता है।

+0

आप जिस तरह के मानकीकरण का जिक्र कर रहे हैं उसका कोई उदाहरण मिला? –

+0

@ प्रोग्रामिंग हीरो - मैं आंतरिक मानकों का जिक्र कर रहा था। मिसाल के तौर पर, यहां हमारी विकास टीम के भीतर काम पर, हम (लीड्स) हमारे पहले प्रोजेक्ट को सौंपा जाने के कुछ ही समय बाद मिलकर मिल गए और हमने जो चाहते थे उसकी मूल बातें निकाल दी: नामकरण मानकों, लॉगिंग, अपवाद हैंडलिंग, इवेंट हैंडलिंग, एन-टियर वास्तुकला, आदि। हमने खुद को एक कारखाना नहीं बनाया है, लेकिन हमने सिस्टम मानकों के बजाय सिस्टम.एक्सप्शन का उपयोग करने के लिए हमारे मानकों के दस्तावेज़ों में निर्दिष्ट किया है और अपवादों को लॉग, पकड़ा, संभाला या अनदेखा किया जाना चाहिए। –

0

कारखाना अतिरिक्त कार्य कर सकता है, जैसे अपवाद लॉग इन हो सकता है?

+1

यह केवल अपवाद के निर्माण को लॉग कर सकता है। उस चरण में कोई स्टैक ट्रेस या कोई वास्तव में उपयोगी जानकारी नहीं है। –

+0

@ प्रोग्रामिंग हीरो: यह एक स्टैक ट्रेस बनाने के लिए 'स्टैकट्रेस' वर्ग का _conceivably_ उपयोग कर सकता है। ऐसा नहीं है कि यह चाहिए। –

5

मुझे लगता है कि प्राथमिक कारण यह है कि .NET अपवाद संदेश स्थानीयकृत हैं। एक वास्तविक संसाधन पाठ को एक स्ट्रिंग संसाधन से पुनर्प्राप्त करने की आवश्यकता है। उस तरह के कोड को एक ही स्थान पर रखना बेहतर है ताकि कोई भी स्ट्रिंग संसाधन नाम को खराब नहीं कर सके।

फैक्ट्री का उपयोग करने का विचार ताकि वास्तविक अपवाद प्रकार को ट्विक किया जा सके, मुझे उपयोगी से कम के रूप में हमला किया जा सके। ऐसा करने से बहुत सारे क्लाइंट कोड तोड़ सकते हैं, जो भी कारण से, उस अपवाद को पकड़ने का प्रयास करता है। एक बार जब आप एक विशिष्ट अपवाद फेंकने वाले कोड को शिप करते हैं, तो आप इसके साथ काफी अटक जाते हैं। बुद्धिमानी से चुनें :)

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