2009-04-06 15 views
5

मैं त्रुटि प्रबंधन को सुन्दर तरीके से कैसे कार्यान्वित कर सकता हूं? उदाहरण के लिए, मेरी डेटा एक्सेस लेयर संभावित रूप से 2 प्रकार की त्रुटियों को फेंक सकती है: 1) अधिकृत पहुंच नहीं है, इस स्थिति में पृष्ठ को सब कुछ छिपाना चाहिए और केवल त्रुटि संदेश 2) त्रुटियों को दिखाएं जो उपयोगकर्ता को सूचित करते हैं कि ऐसा कुछ पहले से मौजूद है डेटाबेस में (नाम अद्वितीय नहीं है - उदाहरण के लिए), और इस मामले में मैं सब कुछ छिपाना नहीं चाहता।3 स्तरित आर्किटेक्चर में त्रुटि हैंडलिंग

संपादित:

कुछ टिप्पणियाँ यहाँ मैं तैयार हूं कि मैं ऐसे NotAuthorizedException, DuplicateException, आदि आदि के रूप में विशेष प्रकार के अपवाद, व्युत्पन्न बनाने चाहिए के परिणामस्वरूप .... यह सब ठीक है और अच्छा है, फिर भी मैं देख सकता हूँ 2 समस्याएं संभावित रूप से:

1) प्रत्येक संग्रहीत प्रो में वापसी क्षेत्र p_error होता है जहां इसमें एक त्रुटि संदेश होता है। डीबी से डेटा प्राप्त करने पर, मुझे यह देखने के लिए इस क्षेत्र की जांच करनी है कि किस प्रकार की त्रुटि लौटा दी गई है, इसलिए मैं एक उपयुक्त अपवाद फेंक सकता हूं। इसलिए, मुझे अभी भी अपने त्रुटि प्रकार/त्रुटि संदेशों को कहीं भी स्टोर करने की आवश्यकता है ..... दूसरे शब्दों में, मुझे उपयोगकर्ता को सटीक संदेश (मुझे निश्चित समय पर) w_ o पहले p_error फ़ील्ड को जांचना चाहिए। जो मुझे त्रुटि ऑब्जेक्ट पर वापस लाता है। किसी को?

2) क्या मैं संभावित रूप से एक दुःस्वप्न में बदल सकता हूं जहां अपवादों की संख्या त्रुटि संदेश प्रकारों की संख्या के बराबर होती है।

क्या मुझे यहां कुछ याद आ रही है?

हर किसी के लिए बहुत धन्यवाद!

उत्तर

0

अपनी खुद की अपवाद परत बनाएं।

DALExceptionManager DuplicateException DatabaseException

BLLExceptionManager NotAuthorizedException InvalidDateException

अपने प्रस्तुति परत में, इस संदर्भ जोड़ें और एक आम अपवाद संचालक पैदा करते हैं। इस तरह आप अपवाद संदेशों से निपटने के तरीके को जानते हैं।

+0

सरल और सुरुचिपूर्ण, मेरे पास ऐसा कुछ था जो वास्तव में लागू हुआ था। इसका एकमात्र नीचे शामिल करने के लिए अतिरिक्त संदर्भ हैं – sarsnake

4

आपको Enterprise Library में अपवाद हैंडलिंग ब्लॉक को देखना चाहिए। रैपिंग अपवादों के आस-पास की अच्छी युक्तियां और कोडवेयर और परतों के बीच उन्हें गुजरना।

+0

धन्यवाद, मैं अभी भी अस्पष्ट हूं कि यह यूआई को कैसे सूचित करेगा ..... – sarsnake

+0

आप यूआई में अपवाद पकड़ सकते हैं, आपको कुछ पकड़ने के लिए अपने अपवाद प्रकार को परिभाषित करने की आवश्यकता नहीं है। –

3

आपकी व्यावसायिक परत कहां है, और यह प्राधिकरण और अखंडता की जांच क्यों नहीं कर रही है? डीएएल उन नियमों की जांच करने के लिए बहुत कम स्तर है - यदि आप वहां कोई समस्या डालते हैं, तो अपवाद फेंकने में काफी समय लगता है। आपकी व्यावसायिक परत या नियंत्रक उस अपवाद को पकड़ सकते हैं, और एक उचित संदेश प्रदर्शित कर सकते हैं - लेकिन ऐसा कुछ नहीं है जो आपको नियमित रूप से करना चाहिए।

+0

डेटाबेस के माध्यम से प्रमाणीकरण किया जाता है, जो मेरे नियंत्रण में नहीं है, इसलिए मुझे इसे डीएएल से यूआई तक सुंदर ढंग से पास करने का एक तरीका चाहिए। दूसरा, कुछ उपयोगकर्ता इनपुट को डेटाबेस के विरुद्ध सत्यापित करने की आवश्यकता है। इस मामले में, डीएएल बिजनेस लेयर में एक त्रुटि लौटाएगा, फिर मुझे इसे यूआई को सुंदरता से प्रस्तुत करने की आवश्यकता है। – sarsnake

+0

मेरे मन में एक दृष्टिकोण है, लेकिन मैं देखना चाहता हूं कि अन्य लोगों ने क्या किया है। – sarsnake

+0

मैं व्यवसाय परत विचार से सहमत हूं ... यही वह है जो मैं अपनी पोस्ट में संवाद करने की कोशिश कर रहा था ... लेकिन किसी भी तरह से – bytebender

0

एक विकल्प है कि मैं का उपयोग कर की सोच रहा था एक त्रुटि वर्ग बनाने के लिए है, लेकिन तो मैं संदर्भ द्वारा व्यापार परत को यूआई से इसे पारित करने के लिए और फिर डेटा पहुँच परत करने की आवश्यकता होगी

मुझे यकीन नहीं है कि मैं इसे समझता हूं। आपको प्रत्येक परत में त्रुटि ऑब्जेक्ट को पास करने की आवश्यकता नहीं है। उदाहरण के लिए, आपके उदाहरण में से एक में, errors that inform the user that something like this already exists in the database (say name not unique - for example), फ्रेमवर्क द्वारा एक एसक्यूएल अपवाद फेंक दिया जा सकता है, और आपको बस अपनी व्यावसायिक परत, या यूआई परत में विशिष्ट अपवाद को पकड़ने की आवश्यकता है।

अन्य लोगों द्वारा सुझाए गए एंटरप्राइज़ लाइब्रेरी द्वारा अपवाद हैंडलिंग ब्लॉक आपको अपनी web.config फ़ाइल में कुछ नीति-आधारित अपवाद हैंडलिंग को परिभाषित करने की अनुमति देगा। यदि आप कुछ एंटरप्राइज़ एप्लिकेशन विकसित करना चाहते हैं तो यह अच्छी जगह हो सकती है। लेकिन सरल आवेदन के लिए, आपको अब तक जाने की आवश्यकता नहीं हो सकती है।

+0

हां, मुझे इतना मिलता है :) लेकिन मुझे घातक त्रुटियों (जैसे कि कोई पहुंच नहीं) और डेटा सत्यापन त्रुटि, पाठ्यक्रम के त्रुटि संदेश की जांच से अलग। क्या ऐसा करने का कोई बेहतर तरीका है? – sarsnake

+0

त्रुटि का प्रतिनिधित्व करने के दो तरीके हैं, या तो त्रुटि कोड या अपवाद। मुझे यकीन नहीं है कि आपके पास प्रत्येक परत तक पहुंच है, लेकिन आप अपने अपवाद वर्ग में त्रुटि कोड लपेट सकते हैं और इसे फेंक सकते हैं। फिर एक ही स्थान पर सभी अपवाद पकड़ो। HTH। –

0

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

याद रखें कि त्रुटि स्थिति मान और ऐसी चीजें हैं जिनसे हमने अपवादों का आविष्कार किया है।

0

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

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