2011-03-11 33 views
1

假設我們有一個使用業務層(EJB,Spring服務等)類型的客戶端應用程序(web或獨立的)。比方說,用戶想要執行一些業務邏輯(例如創建一些東西)。這個操作有一些先決條件,如數據格式,數據庫中其他對象的存在,權限等等。現在什麼是這個業務邏輯層的最佳設計,我的意思是如何返回驗證錯誤,指示成功,返回意外錯誤等?在業務層返回業務驗證結果的首選方法

的方法,我知道:

1)

驗證錯誤返回例如OperationResult目標對象的身份和違反列表,

成功:意外的錯誤OperationResult與狀態=成功空錯誤列表,

拋出運行時異常

2)

驗證錯誤拋出ValidationException(runitme或checked?)具有違規列表

成功:無效或創建實體(如果需要)

對於意外錯誤拋出運行時異常

我知道有兩種基本方式,但每次我開始寫作時都很難做出正確的選擇。

回答

1

我對驗證異常方法有一種反感,畢竟在驗證錯誤中沒有任何例外,所以我覺得很難證明爲此使用異常。所以在理論基礎上,唯一有效的選擇是第一個。儘管這取決於您使用的驗證框架*,但通常更容易編寫異常版本。

無論您的驗證異常(如果您使用的是異常)應該檢查還是不打開另一罐蠕蟲,有些人通常會反對檢查異常,其他人會說完全相反。對於我的兩個便士我相信應該爲編碼錯誤保留運行時異常,並且只要有可能就應該檢查「預期」異常。但我必須強調,這只是我個人的偏好。

*如果您有多個驗證程序都必須在驗證階段運行,則例外情況不是非常有效。如果您打算在第一次失敗的驗證步驟中停止,異常更容易實現,並且可能更易讀。

+0

我同意。最好列出驗證錯誤,然後在最後拋出異常(如果列表不爲空)。將列表附加到例外。列表還允許你向用戶顯示「警告」,所以你可以有一個額外的參數用於確認警告並繼續進行...... – Ben 2011-03-11 13:33:41

+0

@Ben,如果是的話,應該檢查ValidationException還是運行時?如果選中,用戶需要處理該問題,並且可能會在代碼中混淆很多(try/catch塊太多)。在1)版本中明確返回具有違規列表的狀態對象會更好嗎? – veilsoen 2011-03-11 13:46:05

+0

另一方面,靈活的ValidationException層次結構在客戶端更好(捕獲和處理每個正確的方式)而不是簡單的違規列表。 – veilsoen 2011-03-11 13:49:16