私は契約を履行するために2つの操作を行わなければならないBOメソッドを持っています。C#契約の実装と例外
- デシベル
- にレコードを挿入、レコード
両方がアクションを完了するための責任者DAOのメソッドの呼び出しで処理されるためのメタデータを含む電子メール通知を送信します。
私はDAOで例外をトラップしません。私はBOで処理して公開します。最初の呼び出しは、挿入するDAOへの呼び出しであり、NullReferenceExceptionまたはSQL例外の1つをスローすることができます。電子メールメソッドは、多数の例外をスローする可能性のあるSmtpClient.Sendを使用します。
電子メール機能を呼び出す子メソッドが、属性を介して1つの例外(カスタム)を返すように強制することはできますか?
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キャッチによって捕獲されますトライキャッチのちょうど別のレベルのthats:
は、このことを説明するために、 AddSupportTicketで、UI内の1つがインテリジェントなエラーにリダイレクトされるので、それは私にとっては素晴らしいことではありません。正しいカスタム例外を効率的にスローするにはどうすればよいですか?
のようなものを持っているでしょうので、与えられた関数からスローすることができる例外の種類を指定することができますが、WCFを使用している場合、あなたはカスタム例外が必要だと思うなぜ私は考え直すでしょう。あなたがそれに与えることができると思われる追加情報はありますか? –
これは良い動作だと思う - 時には。レイヤーのAPIを使用しやすくするために制限し、呼び出し側がより多くのログのエラーを処理できるようにします。 –
私はPreetに同意します。契約履行の例外を使用してAPI/LOBレイヤーを実装する方がはるかに洗練されています。ビジネスメソッドにとって不可欠な値ではないエラーコードを返すことを管理することは、奇妙で、時には難しいことがあります。 – blu