हमारे सार्वजनिक एसडीके के साथ, हम इस बारे में बहुत जानकारीपूर्ण संदेश देना चाहते हैं कि अपवाद क्यों होता है। उदाहरण के लिए:
if (interfaceInstance == null)
{
string errMsg = string.Format(
"Construction of Action Argument: {0}, via the empty constructor worked, but type: {1} could not be cast to type {2}.",
ParameterInfo.Name,
ParameterInfo.ParameterType,
typeof(IParameter)
);
throw new InvalidOperationException(errMsg);
}
हालाँकि, यह कोड के प्रवाह को अव्यवस्थित करता है, क्योंकि यह कोड क्या कर रहा है के बजाय त्रुटि संदेशों पर बहुत अधिक ध्यान केंद्रित करता है।
एक सहकर्मी ने अपवाद को कुछ इस तरह से फेंकना शुरू कर दिया:
if (interfaceInstance == null)
throw EmptyConstructor();
...
private Exception EmptyConstructor()
{
string errMsg = string.Format(
"Construction of Action Argument: {0}, via the empty constructor worked, but type: {1} could not be cast to type {2}.",
ParameterInfo.Name,
ParameterInfo.ParameterType,
typeof(IParameter)
);
return new InvalidOperationException(errMsg);
}
जो कोड लॉजिक को समझने में आसान बनाता है, लेकिन एरर हैंडलिंग को करने के लिए बहुत सारे अतिरिक्त तरीके जोड़ता है।
"लंबे समय से अपवाद-संदेश अव्यवस्था तर्क" समस्या से बचने के अन्य तरीके क्या हैं? मैं मुख्य रूप से मुहावरेदार सी # /। NET के बारे में पूछ रहा हूं, लेकिन अन्य भाषाएं इसे कैसे प्रबंधित करती हैं यह भी सहायक है।
[संपादित करें]
इसके साथ ही प्रत्येक दृष्टिकोण के पेशेवरों और विपक्षों के लिए अच्छा होगा।
Exception.Data
संपत्ति का उपयोग करने का एक संयोजन , "पिकी" अपवाद को पकड़ने, कोड को पकड़ने और अपने स्वयं के संदर्भ को जोड़ने के साथ-साथ कैप्चर किए गए कॉल स्टैक के साथ सभी योगदान जानकारी है जो बहुत कम क्रिया संदेशों की अनुमति चाहिए। अंत में System.Reflection.MethodBase
अपने "अपवाद निर्माण" विधि को पास करने के लिए विवरण प्रदान करने का वादा करता है।
Exception.Data
। जोर टेलीमेट्री पर कब्जा होना चाहिए। यहां पर रिफलेक्टिंग करना ठीक है, लेकिन यह समस्या को याद करता है।