जब एक डेस्कटॉप अनुप्रयोग में एक अपवाद नहीं होता है तो सबसे अच्छा अभ्यास क्या है?
मैं उपयोगकर्ता को एक संदेश दिखाने के बारे में सोच रहा था, ताकि वह समर्थन से संपर्क कर सके। मैं उपयोगकर्ता को एप्लिकेशन को पुनः आरंभ करने की सलाह दूंगा, लेकिन इसे बलपूर्वक नहीं। यहां जो चर्चा की गई है, उसके समान है: ux.stackexchange.com - अप्रत्याशित एप्लिकेशन त्रुटियों को संभालने का सबसे अच्छा तरीका क्या है?
परियोजना एक .NET WPF अनुप्रयोग है, इसलिए वर्णित प्रस्ताव इस तरह दिख सकता है (ध्यान दें कि यह एक सरलीकृत उदाहरण है। संभवतः अपवाद विवरण को छिपाने के लिए जब तक कि उपयोगकर्ता "विवरण दिखाएँ" पर क्लिक न करें और कुछ कार्यक्षमता प्रदान करें। आसानी से त्रुटि रिपोर्ट):
public partial class App : Application
{
public App()
{
DispatcherUnhandledException += OnDispatcherUnhandledException;
}
private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
LogError(e.Exception);
MessageBoxResult result = MessageBox.Show(
$"Please help us fix it and contact support@example.com. Exception details: {e.Exception}" +
"We recommend to restart the application. " +
"Do you want to stop the application now? (Warning: Unsaved data gets lost).",
"Unexpected error occured.", MessageBoxButton.YesNo);
// Setting 'Handled' to 'true' will prevent the application from terminating.
e.Handled = result == MessageBoxResult.No;
}
private void LogError(Exception ex)
{
// Log to a log file...
}
}
कार्यान्वयन (ViewModels के कमांडर या बाहरी घटनाओं के इवेंट हैंडलर) में, तब मैं केवल विशिष्ट बहिर्जात अपवाद को पकड़ लूंगा और अन्य सभी अपवादों (हड्डी और अज्ञात अपवादों) को ऊपर वर्णित "अंतिम उपाय हैंडलर" तक बबल कर दूंगा। हड्डीविहीन और बहिर्जात अपवादों की परिभाषा पर एक नज़र है: एरिक लिपर्ट - वेक्सिंग अपवाद
क्या यह समझ में आता है कि उपयोगकर्ता को यह तय करने देना चाहिए कि क्या आवेदन को समाप्त कर दिया जाना चाहिए? जब एप्लिकेशन को समाप्त कर दिया जाता है, तो आपके पास सुनिश्चित करने के लिए कोई असंगत स्थिति नहीं होती है ... दूसरी तरफ उपयोगकर्ता बिना सहेजे गए डेटा को ढीला कर सकता है या किसी भी शुरू की गई बाहरी प्रक्रिया को तब तक रोक नहीं सकता है जब तक कि आवेदन पुनः आरंभ नहीं हो जाता है।
या क्या निर्णय है कि यदि आप आवेदन कर रहे हैं, तो आप किस प्रकार के आवेदन के आधार पर बिना किसी अपवाद के आवेदन समाप्त कर सकते हैं? क्या यह कोड " कम्प्लीट, सेकंड एडिशन " में वर्णित "मजबूती" बनाम "शुद्धता" के बीच का व्यापार है
आपको कुछ संदर्भ देने के लिए हम किस प्रकार के आवेदन के बारे में बात कर रहे हैं: आवेदन का उपयोग मुख्य रूप से रासायनिक प्रयोगशाला उपकरणों को नियंत्रित करने और उपयोगकर्ता को मापा परिणाम दिखाने के लिए किया जाता है। ऐसा करने के लिए WPF एप्लिकेशन कुछ सेवाओं (स्थानीय और दूरस्थ सेवाओं) के साथ संचार करता है। WPF एप्लिकेशन उपकरणों के साथ सीधे संवाद नहीं करता है।