私はビジネス上重要な業務の監査サービスを作成しています。サービスは、IoCのパターンを使用して実装されている。このため 私自身の非LINQコードでDuplicateKeyExceptionを使うべきですか?
public interface IAuditWriter
{
void WriteAction(int key, string value);
}
は、私は、実装に固有ではない例外を発生させることを必要としています。
監査プロセスの情報の一部には、固有のキーが含まれています。監査プロセスの一環として、主要な一意性のチェックを提供するのがサービスの現在の要件です。重複キーはプロセス要件に違反します。
現在、サービスはSQL Serverへの書き込みとして実装されます。ほとんどありませんが、キーが重複している可能性があります。この場合、主キー制約違反に不満を表するSqlException
が投げられます。私はむしろこの例外をより一般的な "重複キー"例外で包み込み、捕捉してプロセスが新しい鍵を生成できるようにします。
通常、私は新しい例外クラスを作成することは嫌いです。ほとんどの場合、同じ情報を伝達するのに使用できる適切なタイプがあります。私は過去にSystem.Data.Linq.DuplicateKeyException
を捕まえましたが、これはLINQ関連の名前空間に由来することを除いて、ここに投げられる良い候補のように見え、私のインターフェイスはLINQとは何の関係もありません。
私の当面のオプションがあるように見える:
- 投げ
System.Data.Linq.DuplicateKeyException
とにかく誰もがあまりにも多くの名前空間に読まない願っています。 System.InvalidOperationException
を投げて、私の指を渡してください。他の理由でこの例外を投げることができる実装は決して必要ありません。- 私自身のカスタム
DuplicateKeyException
を投げてください。 - インターフェイスに別のメソッドを作成してキーの一意性をチェックし、キーと値を書き込む前にこれを呼び出します。
これについてのご意見はありますか?
良い答えです、ありがとうございます。厄介な選択肢を排除するプロセスによって、私はカスタム例外が避けられない最良の選択肢だと考えています。 –