2009-09-20 9 views
6

मैं सोच रहा था कि मॉडल में त्रुटियों को संभालने के लिए छोड़कर मानक क्या है।मॉडल में त्रुटि प्रबंधन (एमवीसी)

वर्तमान में मेरे पास मेरे सभी मॉडल द्वारा उपयोग में 'setError' और 'getError' विधियां हैं।

इसका मतलब है कि मैं केवल इस बात से चिंतित हूं कि मेरे मॉडल में किसी विधि को कॉल सही या गलत है या नहीं। यदि यह गलत है तो मैं अपने नियंत्रक में $this->model->getError() का उपयोग करूंगा।

इसके अतिरिक्त मैं एक अलग फ़ाइल स्थापित करने पर विचार कर रहा हूं जिसमें मेरी सभी त्रुटियां हैं। प्रति मॉडल एक फ़ाइल, इस पर भी विचार करना चाहता था।

उत्तर

3

exceptions का उपयोग करने के लिए एक आसान समाधान होगा।

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

जैसे:

throw new UserError("That object no longer exists."); 

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

उदा .:

throw new InternalError("Failed to connect to remote service"); 

त्रुटि संदेशों में से सभी संग्रहित किया जा सकता (हार्ड-कोडेड) स्रोत जहां अपवाद फेंक दिया जाता है में। यह आवश्यक रूप से खराब डिजाइन अभ्यास नहीं है - यदि आप gettext जैसे टूल का उपयोग करते हैं, तो आप आसानी से इन सभी संदेशों का अनुवाद कर सकते हैं।

+0

मुझे यह विचार पसंद है, केवल एक ही चेतावनी है अगर कई त्रुटियां आदर्श हैं तो मैं त्रुटि को निरंतर निष्पादन रिकॉर्ड करना चाहता हूं। इसलिए मैं setError और getError का उपयोग क्यों कर रहा था। मैं जांचता हूं कि वापसी सही है, जिसका मतलब है कि सभी कार्य सफल रहे और यदि मुझे त्रुटि नहीं मिलती है। एक क्रिया जो मैं आंशिक रूप से सफल हो, और नतीजतन मैं झूठी वापसी करना चाहता हूं और संदेश प्राप्त करने के लिए getError का उपयोग करना चाहता हूं कि कौन सा हिस्सा असफल रहा। आशा है कि समझ में आता है। – Andre

1

मैं log4j और log4cxx का उपयोग कर रहा हूं और syslogd पर लॉगिंग कर रहा हूं। कीवी एक साधारण Win32 syslogger है जो आपके लॉग संदेशों को ट्रैक करेगा और उन्हें एक फ़ाइल में सहेज लेगा। Log4j/Log4cxx में कॉन्फ़िगरेशन फ़ाइलें हैं जिनका उपयोग आप अपने सभी लॉग स्तर या लॉग संदेश गंतव्यों को सेट करने के लिए कर सकते हैं (आप एकाधिक स्थानों पर लॉग इन कर सकते हैं)।

सेटअप और उपयोग करने के लिए यह बहुत कम प्रयास करता है, और यह एक आकर्षण की तरह काम करता है।

मैंने log4php स्वयं को आजमाया नहीं है।

अपवाद अच्छे होते हैं जब आप अब अपने प्रोग्राम को निष्पादित करना जारी रखना नहीं चाहते हैं। उच्च स्तर पर अपवादों को पकड़ें जहां आप असफल निष्पादन के पतन-आउट को स्वीकार कर सकते हैं।

1

समीक्षा कैसे कोई अंतिम निर्णय लेने से पहले सत्यापन दिनचर्या बनाने के लिए पर NerdDinner ट्यूटोरियल:

http://nerddinnerbook.s3.amazonaws.com/Part3.htm

मान्यता हिस्सा पेज नीचे रास्ते के 2/3 के बारे में है।

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