जब किसी अपवाद को आपके कोड द्वारा फेंक दिया जाता है जिसे नियंत्रक में किसी क्रिया से बुलाया जाता है तो उसे कैसे संभाला जाना चाहिए? मैं सर्वोत्तम प्रथाओं के कई उदाहरण देखता हूं जहां कोई प्रयास-पकड़ बयान नहीं है। उदाहरण के लिए, एक रिपोजिटरी से डेटा तक पहुँचने:नियंत्रक (एएसपी.नेट एमवीसी) में अपवाद हैंडलिंग
public ViewResult Index()
{
IList<CustomModel> customModels = _customModelRepository.GetAll();
return View(customModels);
}
जाहिर है इस कोड को अगर कॉल एक डेटाबेस है कि यह उपयोग नहीं कर सकते करने के लिए है एक अपवाद फेंक सकता है और हम उदाहरण के लिए इकाई की रूपरेखा की तरह एक ORM उपयोग कर रहे हैं।
हालांकि जो कुछ मैं देख सकता हूं वह यह होगा कि अपवाद बबल हो जाएगा और उपयोगकर्ता को एक ग़लत त्रुटि संदेश दिखाएगा।
मुझे हैंडलरर विशेषता के बारे में पता है, लेकिन मुझे लगता है कि अगर यह अनचाहे अपवाद होता है तो यह आपको अधिकतर त्रुटि पृष्ठ पर रीडायरेक्ट करने के लिए उपयोग किया जाता है।
बेशक, इस कोड को एक कोशिश पकड़ में लिपटे जा सकता है लेकिन अच्छी तरह से अलग नहीं है, खासकर यदि आप अधिक तर्क है:
public ViewResult Index()
{
if (ValidationCheck())
{
IList<CustomModel> customModels = new List<CustomModel>();
try
{
customModels = _customModelRepository.GetAll();
}
catch (SqlException ex)
{
// Handle exception
}
if (CustomModelsAreValid(customModels))
// Do something
else
// Do something else
}
return View();
}
पहले मैं सभी कोड ऐसा अपवाद फेंक सकता है बाहर निकाला है डाटाबेस डेटाप्रोवाइडर क्लास में कॉल करता है जो त्रुटियों को संभालता है और उपयोगकर्ता को संदेश दिखाने के लिए संदेश वापस देता है।
मैं सोच रहा था कि इसे संभालने का सबसे अच्छा तरीका क्या है? मैं हमेशा एक त्रुटि पृष्ठ पर वापस नहीं आना चाहता क्योंकि कुछ अपवादों को ऐसा नहीं करना चाहिए। इसके बजाए, उपयोगकर्ता को एक त्रुटि संदेश सामान्य दृश्य के साथ प्रदर्शित किया जाना चाहिए। क्या मेरी पिछली विधि सही थी या क्या कोई बेहतर समाधान है?
मैं भी पैट्रिक Desjardins 'जवाब से सहमत: अधिभावी त्रुटियों को संभालने के लिए ऑनएक्सप्शन एक शानदार तरीका है। विशेष रूप से यदि यह आधार नियंत्रक में है कि आपके सभी अन्य नियंत्रकों से प्राप्त होता है। – NovaJoe