У меня есть метод BO, который должен выполнить две операции для выполнения своего контракта.
- вставить запись в БД
- отправить уведомление по электронной почте, содержащее метаданные для записи
Обе обрабатываются вызовами отдельных методов DAO, отвечающих за выполнение действия.
Я не перехватываю исключения в моем DAO, я обрабатываю и публикую их в BO. Первый вызов DAO для вставки, и может вызвать исключение NullReferenceException или одно из исключений sql. В методе электронной почты используется SmtpClient.Send, который может создавать множество исключений.
Можно ли заставить дочерний метод, который вызывает функцию электронной почты, возвращать только один тип исключения, пользовательский, через атрибут?
Чтобы проиллюстрировать это:
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
}
Я могу обернуть каждый дочерний вызов метода в свой собственный метод try catch и выдать нужное мне специальное исключение, но это просто еще один уровень try-catch, который перехватывается другим try-catch в AddSupportTicket, а затем - одним в пользовательском интерфейсе для перенаправления на интеллектуальная ошибка, так что это не звучит здорово для меня.
Как эффективно выкинуть правильное пользовательское исключение?