我正在爲一些業務關鍵型操作編寫審計服務。該服務正在使用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