我有一个 BO 方法,它必须执行两个操作才能履行其合同。
- 在数据库中插入一条记录
- 发送包含记录元数据的电子邮件通知
两者都是通过调用负责完成操作的各个 DAO 方法来处理的。
我不会在我的 DAO 中捕获异常,我会在 BO 中处理和发布它们。第一次调用是对 DAO 进行插入,并且可以抛出 NullReferenceException 或其中一个 sql 异常。email 方法使用 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 被 AddSupportTicket 中的另一个 try catch 捕获,然后在 UI 中重定向到一个智能错误,所以这对我来说听起来不太好。
我应该如何有效地抛出正确的自定义异常?