2011-03-04 12 views
5

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

मेरे फिल्टर इस तरह दिखता है:

if (filterContext.Exception is ClientException) 
     message = filterContext.Exception.Message.Replace("\r", " ").Replace("\n", " "); 
    else 
     message = "An error occured while attemting to perform the last action. Sorry for the inconvenience."; 

    filterContext.HttpContext.Response.Status = "500 " + message; 

मैं इस http://blogs.msdn.com/b/kcwalina/archive/2007/01/30/exceptionhierarchies.aspx पढ़ जहां लेखक उपयोग त्रुटियों की रिपोर्ट करने के लिए मौजूदा नेट अपवाद प्रकार का उपयोग कर सिफारिश की। हालांकि, मेरे कस्टम अपवाद को पेश करके, मुझे बस अपने फ़िल्टर में एक ही चेक करना है। क्या मेरा दृष्टिकोण ठीक है?

उत्तर

3

मुझे कुछ कारणों से यह दृष्टिकोण पसंद है।

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

दूसरा, यह निर्णय लेने की अनुमति देता है कि उचित जगह पर अपवाद प्रदर्शित करना है या नहीं। उदाहरण के लिए, सभी IOExceptions प्रदर्शित नहीं होते हैं। कुछ हो सकते हैं, और अन्य नहीं होंगे। विशिष्ट अपवादों को कॉल स्टैक में कहीं भी पकड़ा और परिवर्तित किया जा सकता है, ताकि ट्रांज़ॉर्मेशन उस स्थान पर किया जा सके जहां इसे सही माना जाता है।

उन दोनों चीजों का एक साथ मतलब यह है कि भविष्य में डेवलपर निष्पादित होने के लिए अपवाद की पूरी कक्षा को अपर्याप्त रूप से परिवर्तित नहीं करेगा, या ऐसा लगता है कि वास्तव में ऐसा होने पर कुछ प्रदर्शित नहीं किया जाएगा।

इसके अलावा, किसी विशेष अपवाद प्रकार का उपयोग करने का उद्देश्य बाद में यह निर्धारित करना है कि उस अपवाद के जवाब में क्या कार्रवाई की जानी चाहिए। "इस संदेश को उपयोगकर्ता को प्रदर्शित करें" निर्दिष्ट करने के लिए एक पूरी तरह से अच्छी कार्रवाई है। एक बार यह निर्णय लेने के बाद, अपवाद की सटीक प्रकृति पूरी तरह से असंभव है। (लॉग इन प्रयोजनों के लिए, मूल समस्या को इंजेक्शन एक्सेप्शन प्रॉपर्टी में रखा जा सकता है।)

तो, मेरी राय में, यह एक अच्छा डिज़ाइन है।

1

यदि आपका दृष्टिकोण आपके लिए काम करता है तो यह ठीक है। और क्या आप हैरान हैं कि एक माइक्रोसॉफ्ट ब्लॉग सिफारिश कर रहा है कि आप अपनी अपवाद कक्षा का उपयोग करें? ;)

कुछ .NET लाइब्रेरी सुविधाएं और तृतीय पक्ष ओएसएस सामान हैं जो केवल .NET अपवादों के साथ काम करेंगे।

दोनों दुनिया के सर्वश्रेष्ठ प्राप्त करने के लिए आप हमेशा अपने .NET अपवाद ऑब्जेक्ट को अपने आप में बढ़ा सकते हैं।

1

मैं अपवादों के प्रकार के आधार पर विभिन्न थ्रेसहोल्ड मानों का उपयोग करूंगा, और ये थ्रेसहोल्ड मान अपवाद संदेशों से जुड़े होंगे।

विशेष थ्रेसहोल्ड मूल्य तर्क के आधार पर आप यह तय करना चाहेंगे कि अपवाद दिखाना है या नहीं।

2

आपका दृष्टिकोण ठीक आईएमओ है लेकिन विकल्प हैं। (हम सॉफ़्टवेयर डेवलपर्स हैं इसलिए हमेशा विकल्प होते हैं।)

आप एक ध्वज को स्टोर करने के लिए Exception Data शब्दकोश का उपयोग कर सकते हैं यह इंगित करता है कि कोई अपवाद क्लाइंट अपवाद है या नहीं। फिर आप ध्वज के अस्तित्व के लिए अपना फ़िल्टर जांच सकते हैं।

1

इस समाधान के साथ मेरी चिंता यह है कि इन अपवादों को आम तौर पर एक व्यापार परत (या एमवीसी शब्दावली में मॉडल ऑब्जेक्ट्स) में वस्तुओं द्वारा फेंक दिया जाएगा। आपके द्वारा वर्णित उपयोग वास्तव में एक प्रस्तुति चिंता के रूप में माना जाएगा।

आमतौर पर आपको अपने मॉडल में जो भी अपवाद है उसे पुनर्स्थापित करने की आवश्यकता होगी, केवल संवाद करने के लिए कि उपयोगकर्ता को अपवाद का खुलासा किया जा सकता है या नहीं। उपयोगकर्ता को जानकारी के साथ क्या करने की उम्मीद है? यदि उपयोगकर्ता स्थिति को ठीक कर सकता है तो शायद राज्य को शुरू करने के लिए संकेत देने का अपवाद नहीं होना चाहिए?

मैं प्रति मामले विशिष्ट अपवादों को पकड़ने और मौके पर प्रस्तुति निर्णय लेने के लिए चिपकता हूं। आप एक अपवाद भेज सकते हैं, पकड़े गए, हालांकि मॉडल के रूप में उपयोग के रूप में उपयोग किया जाता है। मैं अभी भी नियंत्रक को निर्णय लेने दूंगा, जो भी अपवाद फेंकता है।

+0

इस उपयोगी जानकारी के लिए धन्यवाद। – Prabhu

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