2012-05-08 47 views
1

我想找出最佳的通用方法來處理規則不總是可執行的業務規則。
表單正通過stored_procedure調用提交給數據庫。目前,業務邏輯被寫入stored_procedure,而不是單獨的業務應用層。存儲過程返回一個包含錯誤和錯誤級別(信息,建議,警告,錯誤和致命錯誤)的數據集C#ASP.NET over-rule不可強制執行的業務規則

信息僅用於提供可能需要的更新。
建議允許用戶中止更新/插入但是默認的操作是繼續
警告允許用戶中止更新/插入但默認動作是取消
錯誤違反強制性的業務規則,通常與數據完整性並強制更新/插入被取消,但用戶可以選擇修改提交的數據並再次嘗試
致命的是用戶無法修復的事情(與數據庫失去連接,用戶權限被撤銷,數據從表單被填充等)。並將強制交易中止

這是我正在嘗試做的一個例子。

一種建立賽季碼

  • 代碼形式
  • Descrption
  • 起始日期
  • 結束日期

有兩種類型的驗證要求:

強制性:例如代碼和說明必須完成,並且必須是唯一的,開始日期必須在結束日期前

可選:開始日期和結束日期通常是連續的,即下一個季節的開始日期將是結束日期之後的一天previoius賽季,然而這並非總是如此。我想警告用戶他們有潛在的錯誤,並讓他們確認輸入的數據是否正確。如果他們確認,那麼我需要忽略重新提交時的驗證規則。

我想在存儲過程中忽略一個額外的參數來忽略可選(信息和警告),這是隻有在重新提交時設置,如果用戶已確認問題爲確定。錯誤和致命仍然會導致更新失敗。

任何人都可以提出一個更好的選擇嗎?

回答

1

您只需要一個執行類型業務規則,即在規則計算結果爲True時調用方法(規則操作)的規則。該動作可以帶參數(例如,一個枚舉ErrorLevel)並採取相應的行動,記錄錯誤,通知用戶,保存用戶的條目等等)。例如:

If UserRole is Admin and (StartDate is less than or equal to EndDate) 
then Prosess(ErrorLevel.Info) 
else Abort(ErrorLevel.Fatal)