هل يجب علي استخلاص استثناءات مخصصة من Exception أو ApplicationException في .NET؟

StackOverflow https://stackoverflow.com/questions/52753

  •  09-06-2019
  •  | 
  •  

سؤال

ما هي أفضل الممارسات عند إنشاء فئات الاستثناء الخاصة بك في حل .NET:لتستمد من System.Exception او من System.ApplicationException?

هل كانت مفيدة؟

المحلول

وفقًا لجيفري ريختر في كتاب إرشادات تصميم الإطار:

System.ApplicationException هي فئة لا ينبغي أن تكون جزءًا من إطار عمل .NET.

كان المقصود منه أن يكون له معنى ما حيث أنه من المحتمل أن تتمكن من التقاط "جميع" استثناءات التطبيق، ولكن لم يتم اتباع النمط وبالتالي ليس له أي قيمة.

نصائح أخرى

يجب عليك استخلاص استثناءات مخصصة من System.Exception.

حتى MSDN يقول الآن للتجاهل ApplicationException:

إذا كنت تقوم بتصميم تطبيق يحتاج إلى إنشاء استثناءات خاصة به ، يُنصح باستخلاص استثناءات مخصصة من فئة الاستثناء.كان يعتقد في الأصل أن الاستثناءات المخصصة يجب أن تستمد من فئة ApplicationException ؛ولكن في الممارسة العملية لم يتم العثور على هذا لإضافة قيمة كبيرة.لمزيد من المعلومات، راجع أفضل الممارسات للتعامل مع الاستثناءات.

http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx

ApplicationException تعتبر عديمة الفائدة هي حجة قوية وحاسمة ضد ApplicationException.

النتيجة:لا تستخدمه.يشتق من Exception.

يعتبر مؤلفو الإطار أنفسهم أن ApplicationException لا قيمة له:

http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx

مع متابعة لطيفة هنا:

http://blogs.msdn.com/kcwalina/archive/2006/07/05/657268.aspx

عندما تكون في شك، أتبع كتابهم المبادئ التوجيهية لتصميم الإطار.

http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756

تمت مناقشة موضوع مشاركة المدونة بشكل أكبر هناك.

روبية

أنا معتاد على القيام بما يلي:

private void buttonFoo_Click()
{
    try
    {
       foo();
    } 
    catch(ApplicationException ex)
    {
      Log.UserWarning(ex);
      MessageVox.Show(ex.Message);
    }
    catch(Exception ex)
    {
       Log.CodeError(ex);
       MessageBox.Show("Internal error.");
    }
}

انها تسمح للقيام بالفرق بين:

  • خطأ في نظام كود C# يجب علي إصلاحه.
  • خطأ مستخدم "عادي" لا يحتاج إلى تصحيح مني.

أعلم أنه لا يُنصح باستخدام ApplicationException، لكنه يعمل بشكل رائع نظرًا لوجوده عدد قليل جدا من الفصول التي لا تحترم نمط ApplicationException.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top