我正在为一些业务关键型操作编写审计服务。该服务正在使用IoC模式实施:因此,我需要它提出不特定于实现的异常。我应该在自己的非LINQ代码中使用DuplicateKeyException吗?
审核过程中的部分信息包括一个旨在唯一的密钥。作为该服务的当前要求,其作为其审核过程的一部分提供对关键唯一性的检查。重复密钥违反了流程要求。
目前,该服务将作为写入SQL-Server的方式来实现。尽管不太可能,但可能该密钥可能是重复的,在这种情况下,会抛出SqlException
抱怨主键约束违规。我宁愿将这个异常封装在一个更通用的“重复键”异常中,这个异常可以被捕获,然后允许进程生成一个新的键。
通常,我讨厌创建一个新的异常类;几乎总是有一个合适的类型可用于传达相同的信息。过去我已经抓到了System.Data.Linq.DuplicateKeyException
,除了它来自LINQ相关的命名空间外,看起来像是一个很好的候选者,而且我的界面与LINQ没有任何关系。
我急迫的选择似乎是:
- 投掷
System.Data.Linq.DuplicateKeyException
无论如何,希望没人看到的命名空间太多了。 - 丢弃
System.InvalidOperationException
并穿过我的手指我从来不需要一个可能因其他原因而抛出此异常的实现。 - 扔我自己的自定义
DuplicateKeyException
。 - 在接口中创建一个单独的方法来检查密钥唯一性,并在写入密钥和值之前调用它。
你对此有什么看法?
一个很好的答案,谢谢。通过消除糟糕的选择,我认为自定义的例外是这里不可避免的最佳选择。 – 2009-08-27 14:45:13