例外処理のベストプラクティスは内の例外処理ですか?例外処理内での例外処理
キャッチ内でカスタムオブジェクトを使用し、システムのほとんどのアプリケーションサーバー層でブロックする既存のC#(Framework 4.0)システムで作業しています。私は過度に偏執的なことかもしれないが、私はこれらに発生する可能性のある未処理の例外について自分自身を非常に心配見つける
public void DoSomeStuff(string sGUID)
{
try
{
// Foo
}
catch (Exception oEx)
{
oExceptions.Add(oEx);
if (oDBConn.NumberOfActiveTrans > 0)
{
oDBConn.Rollback();
}
}
finally
{
oDBConn.DeleteLocksByGUID(sGUID);
}
}
:
は、このコードベースのメソッドの次切り取らバージョンを考えてみましょう。
このように、次のような更新されたバージョンが受け入れ可能なプラクティスか、同じことを達成するためのよりよい方法がありますか?
public void DoSomeStuff(string sGUID)
{
try
{
// Foo
}
catch (Exception oEx)
{
oExceptions.Add(oEx);
try
{
if (oDBConn.NumberOfActiveTrans > 0)
{
oDBConn.Rollback();
}
}
catch (Exception oEEx)
{
oExceptions.Add(oEEx);
}
}
finally
{
try
{
oDBConn.DeleteLocksByGUID(sGUID);
}
catch (Exception oFEx)
{
oExceptions.Add(oFEx);
}
}
}
私はデータベース内でトランザクションのロールバックを処理します(たとえば、データの更新/挿入にストアドプロシージャを使用するなど)。したがって、最初の 'try'ブロックで挿入/更新が失敗したときに' catch'ブロック内でトランザクションをロールバックする必要はありません。 (o.O) –