2009-05-21 10 views
1

私はあなたの考えを得るのに興味がある簡単なもの:リポジトリ内の例外:どのように扱いますか?

あなたのレポジトリの実装では、レポジトリ内で例外をスローし、例外処理を呼び出し側に任せたいのですか、あなたのリポジトリ内の例外、例外を格納し、false/nullを返しますか?

答えて

3

それに依存します。

例外をバブルアップさせますか?絶対に。しかし、私は接続の失敗、コマンドの失敗のためにこれを望みます。あなたが何をしても、これらを隠すだけではなく、それらについて知る必要があります。私は副作用やさらなる損傷を減らすために、自分のアプリケーションができるだけ早く失敗することを好む。

また例外もログに記録します。私はこれを助けるためにLog4netを使用します。しかし、私はソースに例外を記録するのが好きです。私は彼らがそこから泡立つようにします。

nullを返しますか?何かが見つからない場合(つまり、IDで何かを探していて、そこにない場合)は、例外ではなくヌルを返します。しかし、これが起こったときに新しい例外がスローされることがあります。

主なポイント:例外はルールではなく「例外的」でなければなりません。例外がスローされた場合は、何かが本当に間違っていて、それを修正する必要があるためです。

+0

あなたの主なポイントは非常に有効だと思います。 +1 –

0

私は通常、例外的なリークを起こさせますが、私が特にEnterpriseyの気分に陥っている場合は、RepositoryExceptionにラップしてクライアントが基盤となるストレージエンジンを気にしないようにします。

例外の代わりにfalse/nullを返すことは決してありません。すでにこれらの値の意味があるからです。

まれなケースでは、例外のないケースで例外を生成する脳死のストレージエンジンがある可能性があります。これらの特定のものをキャッチし、必要に応じてnullを返します(たとえば、行が存在しない場合その場合、ストレージエンジンはエラーをスローします。これをキャッチしてnullを返します)。

+0

ええ、私はあなたと一緒に、例外ではない事例に関連するエラーを捕まえるだけです。私がリポジトリ内で例外をキャッチしてfalseを返した場合、私がしていたことは、リポジトリの外にあるエラーをトラップすることを忘れないようにしていたことです。これは最終的にはユーザーエクスペリエンスで同じことになります。 (私がエラーをキャッチし、正常に失敗していると仮定して) –

関連する問題