سؤال

لدي بو الطريقة التي يجب أن تفعل اثنين من عمليات الوفاء بالعقد.

  1. إدراج سجل في db
  2. إرسال إشعار البريد الإلكتروني التي تحتوي على البيانات الوصفية للعلم

سواء في التعامل مع المكالمات الفردية داو أساليب المسؤولة عن استكمال العمل.

أنا لا اعتراض الاستثناءات في DAO, أتعامل مع ونشرها في بو.المكالمة الأولى هو DAO لإدراج و يمكن رمي NullReferenceException أو واحد من sql استثناءات.البريد الإلكتروني الأسلوب يستخدم SmtpClient.ارسال التي يمكن رمي عدد كبير من الاستثناءات.

هل من الممكن أن إجبار الطفل أسلوب المكالمات البريد الإلكتروني وظائف للعودة نوع واحد فقط من استثناء واحد مخصص من خلال الخاصية ؟

ولتوضيح ذلك:

public void AddSupportTicket(SupportTicketDTO ticket)
{
    try
    {
        supportTicketDAO.Insert(ticket);
        email.SendNotification(ticket);
    }
    catch (ExceptionA exc) { ... } // both of the methods can throw exceptions that
    catch (ExceptionB exc) { ... } // can overlap.  I just care about returning       
    catch (ExceptionC exc) { ... } // a custom EmailException or DataException
}

أنا يمكن أن يلتف كل طفل استدعاء الأسلوب في محاولة الصيد ورمي استثناء مخصصة أريد, ولكن هذا مستوى آخر من محاولة اللحاق يحصل على المحاصرين من جانب آخر محاولة الصيد في AddSupportTicket ثم واحد في واجهة المستخدم إلى إعادة توجيه ذكي خطأ ، بحيث لا يبدو كبيرا بالنسبة لي.

كيف يجب أن بكفاءة رمي الصحيح مخصص استثناء ؟

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

المحلول

نعم من الممكن جدا.تحقق من مكتبة المؤسسة معالجة الاستثناء كتلة.الكثير من الاشياء العظيمة على رفع, تغليف, تسجيل استثناءات من بين طبقات فضلا عن إعداد السياسات بحيث يمكنك التعامل معها في التكوين إذا كنت ترغب في.جنبا إلى جنب مع تطبيق تسجيل كتلة إنه مزيج قوي.

نصائح أخرى

إذا كان الخاص بك باستخدام WCF يمكنك تحديد نوع الاستثناء يمكن طرح من وظيفة معينة ، حتى في واجهة الخدمة سيكون لديك شيء مثل

[OperationContract]
[FaultContract(typeof(MemberAlreadyExistsException))]
void MemberInsert(Member mu);

لا أعرف عن سمة ولكن هل يمكن لك ليس فقط القيام به:

try{
...
} catch(Exception ex) {

  throw new MyException("Some biz msg", ex);
}

C# لا توفر وظائف مثل جافا throws الكلمة إذا كان هذا ما كنت في اشارة الى.يمكنك توثيق أنواع الاستثناءات التي رمز بلدي رمي عبر وثائق XML المعايير ، ولكن ليس هناك طريقة تعاقديا القوة هذا.

أفضل رهان هو التوثيق الذكي معالجة الاستثناء على جميع المستويات من التطبيق الخاص بك ، كما سطحي كما أن الأصوات.

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