प्रोग्रामिंग यह सब निर्भर करता है से संबंधित कई मुद्दों में के रूप में ...
मैं पहली बार अपने एपीआई इसलिए असाधारण मामलों पहली जगह में ऐसा नहीं हो सकता परिभाषित करने के लिए प्रयास करना चाहिए वास्तव में है कि एक पाते हैं।
अनुबंध द्वारा डिजाइन का उपयोग करने से यह करने में मदद मिल सकती है। यहां कोई ऐसा फ़ंक्शन डालेगा जो त्रुटि या क्रैश फेंक देगा और प्रोग्रामिंग त्रुटि इंगित करेगा (उपयोगकर्ता त्रुटि नहीं)। (कुछ मामलों में इन चेक को रिहाई मोड में हटा दिया जाता है।)
फिर सामान्य जेनरेट विफलताओं के लिए अपवाद रखें, जैसे डीबी कनेक्शन विफल, आशावादी लेनदेन विफल, डिस्क लेखन विफल रहा।
इन अपवादों को तब तक पकड़ा जाना चाहिए जब तक वे 'उपयोगकर्ता' तक नहीं पहुंच जाते। और परिणामस्वरूप उपयोगकर्ता को फिर से प्रयास करने की आवश्यकता होगी।
त्रुटि एक नाम या कुछ और लिखने में कोई गलती की तरह एक उपयोगकर्ता त्रुटि तो आवेदन इंटरफ़ेस कोड अपने आप में है कि सीधे से निपटने है। यह संभावित रूप से आदि
आवेदन लेयरिंग अनुवाद एक उपयोगकर्ता के अनुकूल त्रुटि संदेश के साथ संभाल करने की आवश्यकता होगी के बाद से इस तो एक सामान्य त्रुटि है यहाँ भी उपयोगी है। तो आइए एक खाते से नकद को दूसरे खाते में स्थानांतरित करने का उदाहरण लें:
transferInternal(int account_id_1, int account_id_2, double amount)
{
// This is an internal function we require the client to provide us with
// valid arguments only. (No error handling done here.)
REQUIRE(accountExists(account_id_1)); // Design by contract argument checks.
REQUIRE(accountExists(account_id_2));
REQUIRE(balance(account_id_1) > amount);
... do the actual transfer work
}
string transfer(int account_id_1, int account_id_2, double amount)
{
DB.start(); // start transaction
string msg;
if (!checkAccount(account_id_1, msg)) return msg; // common checking code used from multiple operations.
if (!checkAccount(account_id_2, msg)) return msg;
if (!checkBalance(account_id_1, amount)) return msg;
transferInternal(account_id_1, account_id_2, amount);
DB.commit(); // This could fail with an exception if someone else changed the balance while this transaction was active. (Very unlikely but possible)
return "cash transfer ok";
}
स्रोत
2009-03-23 17:50:57
"पूरी तरह से पाया जाना चाहिए" के मामले में, मैं दावा का उपयोग करूंगा। अंतिम पैराग्राफ के लिए +1। –
"अगर वे होते हैं तो कोड निष्पादन के साथ जारी नहीं रह सकते हैं।" आप ऐसा कर सकते हैं। आईडी डीबी कनेक्शन खो गया है। कार्यक्रम जारी रख सकता है और उपयोगकर्ता से पुन: कनेक्शन की प्रतीक्षा करने के लिए कहेंगे। –
मायकोला, हाँ यूजर कोड डीबी कोड नहीं होगा। इसलिए अपवाद। –