मुझे अपवाद हैंडलिंग के दो दृष्टिकोण पता हैं, चलिए उन्हें देखें।अपवाद हैंडलिंग: अनुबंध बनाम असाधारण दृष्टिकोण
अनुबंध दृष्टिकोण।
जब कोई विधि ऐसा नहीं करती है जो यह कहती है कि यह विधि शीर्षलेख में करेगी, तो यह अपवाद फेंक देगा। इस प्रकार विधि "वादा करता है" कि यह ऑपरेशन करेगा, और यदि यह किसी कारण से विफल रहता है, तो यह अपवाद फेंक देगा।
असाधारण दृष्टिकोण।
कुछ अजीब होता है जब केवल अपवाद फेंक देते हैं। जब आप सामान्य नियंत्रण प्रवाह (यदि कथन) के साथ स्थिति को हल कर सकते हैं तो आपको अपवादों का उपयोग नहीं करना चाहिए। आप नियंत्रण प्रवाह के लिए अपवादों का उपयोग नहीं करते हैं, जैसा कि आप अनुबंध दृष्टिकोण में हो सकते हैं।
हम एक ग्राहक वर्ग के लिए एक विधि OrderProduct कहा जाता है कि है:
अलग मामलों में दोनों तरीकों का उपयोग करने देता है।
अनुबंध दृष्टिकोण:
class Customer
{
public void OrderProduct(Product product)
{
if((m_credit - product.Price) < 0)
throw new NoCreditException("Not enough credit!");
// do stuff
}
}
असाधारण दृष्टिकोण:
class Customer
{
public bool OrderProduct(Product product)
{
if((m_credit - product.Price) < 0)
return false;
// do stuff
return true;
}
}
if !(customer.OrderProduct(product))
Console.WriteLine("Not enough credit!");
else
// go on with your life
यहाँ मैं, असाधारण दृष्टिकोण पसंद करते हैं के रूप में यह वास्तव में असाधारण एक ग्राहक के पास पैसे नहीं यह सोचते हैं कि वह लॉटरी जीत नहीं पाए है कि नहीं है ।
लेकिन यहां एक ऐसी स्थिति है जो मैं अनुबंध शैली पर गलती करता हूं।
असाधारण:
class CarController
{
// returns null if car creation failed.
public Car CreateCar(string model)
{
// something went wrong, wrong model
return null;
}
}
जब मैं एक विधि CreateCar कहा जाता है कहते हैं, मैं बहुत कुछ घटिया नल पॉइंटर है, जो मेरे चल कोड एक दर्जन से अधिक लाइनों बाद में विनाश कर सकते हैं के बजाय एक कार उदाहरण उम्मीद wel। इस प्रकार मैं इस से अनुबंध पसंद करता हूं:
class CarController
{
public Car CreateCar(string model)
{
// something went wrong, wrong model
throw new CarModelNotKnownException("Model unkown");
return new Car();
}
}
आप किस शैली का उपयोग करते हैं? अपवादों के लिए सबसे अच्छा सामान्य दृष्टिकोण आपको क्या लगता है?
+1 एक शून्य या -1 परिणाम लौटने के आपके उदाहरण के लिए +1। कोड को स्पष्ट करने के बजाय, शून्य या -1 वापसी आवेदक विधि के लेखक को यह जानने के लिए मजबूर करती है कि कैसे लागू विधि गैर-मानक परिणाम की रिपोर्ट करने का विकल्प चुनती है। अपवाद एक क्लीनर, अनुबंध दृष्टिकोण है जिसमें आवेदक (संभवतः) बदलते काले बॉक्स के रूप में आवेदक का इलाज कर सकता है। सभी आवेदकों को यह पता होना चाहिए कि इसे अपवाद को संभालना होगा, न कि यह आज एक शून्य है और एक Integer.MIN_VALUE कल है। – rajah9