2010-12-17 12 views
8

यदि मेरे पास एक स्तरित एप्लिकेशन है और मेरा डेटा लेयर आशावादी कॉनकुरेंसी एक्सेप्शन कॉलिंग परत या वास्तव में निम्न परत को इस से कैसे निपटाना चाहिए ??एक स्तरित अनुप्रयोग में अपवाद हैंडलिंग

बुला परत पता नहीं क्या एक OptimisticConcurrencyException है, तो मैं एक कस्टम अपवाद को लागू किया जाना चाहिए और OptimisticConcurrencyException को पकड़ने और अपने कस्टम अपवाद फेंक?

इस पर कुछ मार्गदर्शन की सराहना की जाएगी।

उत्तर

7

OptimisticConcurrencyException एक अपवाद है जो डेटा परत से संबंधित है और इसलिए इसके भीतर निहित होना चाहिए। यह असंभव है कि कॉलिंग परत इसे संभाल सकता है।

मैं DataSourceException जैसे अधिक सामान्य अपवाद बनाएगा जिसमें कुछ संदर्भ शामिल होंगे जैसे कि फ़ंक्शन विफल हुआ (और किस पैरामीटर के साथ) और क्यों। मैं आंतरिक अपवाद को आंतरिक अपवाद के रूप में भी शामिल करूंगा। http://blog.gauffin.org/2010/11/do-not-catch-that-exception/

मैं भी अपवाद हैंडलिंग के बारे में कुछ अन्य प्रविष्टियों में लिखा है, अपवाद टैग पर क्लिक करें:

पकड़ने अपवादों के बारे में अपने ब्लॉग प्रविष्टि पढ़ें।

अद्यतन

मैं निम्नलिखित परियोजनाओं बनाना होगा: ---

  • Project.Web < विनिर्देश इंटरफेस के माध्यम से सेवा का उपयोग करता।
  • Project.Service < - विशिष्टता में सब कुछ
  • Project.Service.Specification < --- जगह अपवाद (वर्ग) यहाँ और अपनी सेवाओं को परिभाषित इंटरफेस (या खजाने को लागू करता है अगर आप किसी भी सेवाओं का उपयोग नहीं करते)।
+0

मेरे यूआई, MVVM है मैं अपने ViewModel उपयोगकर्ता कि रिकॉर्ड किसी अन्य उपयोगकर्ता द्वारा अद्यतन किया गया था सलाह देने और उसके अनुसार कुछ नेविगेशन प्रदर्शन करने के लिए चाहते हैं, लेकिन मैं अपवाद की किस प्रकार पकड़ करते हैं? उस परत में यह केवल सिस्टम के रूप में अपवाद की पहचान करने में सक्षम होगा। अपवाद। – David

+0

इस मामले में, एक अपवाद बनाएं जो इंगित करता है कि रिकॉर्ड बदल गया है। उदाहरण के लिए 'EntityChangedByOtherException' या ऐसा कुछ। यहां पाए गए पृथक इंटरफ़ेस पैटर्न का पालन करें: परतों के बीच युग्मन को कम करने के लिए http://martinfowler.com/eaaCatalog/separatedInterface.html। – jgauffin

+0

@jgauffin, उत्तर के लिए फिर से धन्यवाद। क्या आप सुझाव दे रहे हैं कि मैं उदाहरण के लिए कार्यान्वित करता हूं EntityChangedByOtherException (जो System.Exception से प्राप्त होगा) असेंबली/परत में जो इसे फेंक देगा और इसके लिए एक इंटरफ़ेस को अन्य असेंबली में परिभाषित करेगा उदा। IENTityChangedByOtherException जो मेरा वीएम उपयोग करेगा? – David

4

आपको कॉलिंग परत के परिप्रेक्ष्य से इसे देखने की आवश्यकता है। परत ने डेटा परत को नौकरी करने के लिए कहा है। यदि OptimisticConcurrencyException को आपकी डेटा परत और अनुबंध का पालन करके नियंत्रित किया जा सकता है, तो हर तरह से इसे पकड़ें और फिर नौकरी को पूरा करें और पूरा करें।

यदि, हालांकि, यह नौकरी के लिए घातक है, जिसे आप करने के लिए कहा जा रहा है, और यदि कॉलर इसकी अपेक्षा नहीं कर रहा है, या उसे नहीं पता है, तो यह आपके लिए अपवाद वर्ग बनाने के लिए ठीक है, अपवाद को पकड़ें जो कॉलिंग परत के लिए विदेशी है, और इसके बजाय इसे फेंक दें। यह कुछ ऐसा है जो कॉलिंग लेयर के बारे में जान सकता है, और इस फ़ंक्शन/एपीआई का उपयोग करने के दुष्प्रभाव के रूप में अच्छी तरह से प्रलेखित किया जा सकता है।

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