Csla框架之业务与验证规则
看時間還早,寫篇日志消遣消遣。今天來回顧一下Csla框架中的業務與驗證規則,這個功能也是作者在框架中重 點實現的一個方面,意圖是在業務對象中以一種標準的方式來支持和處理數據有效性規則的驗證。(提前說明的一點是,學習此框架的首要目的是提高軟件開發思維能力,所以內容可能有些針對此框架,同時夾雜著個人想法,如有錯誤請指教。)
前面在屬性聯想的章節中也提到在框架中對業務規則的驗證,是通過調用屬性set時框架自動觸發當前屬性的業務驗證規則;此外,在調用工廠方法創建一個新對象時也可以顯示的調用CheckRules()方法來遍歷所有驗證規則,在特殊的屬性關聯時,也可以通過屬性名稱來調用其他屬性的驗證規則來實現驗證。
對象規則定義的方法有兩種,一種被稱為每類型的規則,也就是同樣的對象類型只實例化一次業務規則,這樣會減少系統內在開支,也是框架默認的實現方法;另一種是每實例類型的規則,也就是創建新對象實例時就會為當前對象創建該對象的業務規則信息,可想而之,有些對象的操作權限會根據當前登陸用戶來決定,這種情況就會適用。
在實現驗證規則時,作者引入了委托,也就是將驗證規則提升為了一定規則的對象類型,通過約定好的規則來定
義每類驗證方法,如必填項,數字范圍,復雜的可能還會對數據庫進行操作等,典型的方法簽名如下:
1: public delegate bool RuleHandler(object target, RuleArgs e); 2: public delegate bool RuleHandler<T, R>(T target, R e) where R : RuleArgs; ?可以看出它們的樣式特別像事件,其中第2行是實現的范型類型。這樣,開發者就可以按規則定義自己的業務方法,再分配給需要規則定義的屬性。方法參數中的RuleArgs保存屬性信息及驗證結果描述信息。
另外一個輔助類是失效業務規則的跟蹤,它會存在于每個對象實例中(而且是在數據違背規則時才會初始化),當賦值操作違背業務規則時系統就會記錄當前的錯誤信息,并通過錯誤處理接口向客戶端的數據綁定提供錯誤信息(框架實現了數據綁定接口),當用戶更新失效數據時系統及時清除當前失效記錄。值得一提的是失效記錄會隨著N層撤銷功能一塊被拍照及撤銷,錯誤信息也會是在對象保存時系統判斷是否能保存的重要依據。
此功能使用了反射,這個應該不會是討論點了,常提到的系統性能與可擴展性及可維護性的權衡問題大家心里都明白,這東西不能鉆牛角尖。
在這里也就是大體說一下,希望不會太讓大家失望。最后貼一個驗證規則樣例(源于框架CommonRules類):
1: /// <summary> 2: /// Rule ensuring a string value contains one or more 3: /// characters. 4: /// </summary> 5: /// <param name="target">Object containing the data to validate</param> 6: /// <param name="e">Arguments parameter specifying the name of the string 7: /// property to validate</param> 8: /// <returns><see langword="false" /> if the rule is broken</returns> 9: /// <remarks> 10: /// This implementation uses late binding, and will only work 11: /// against string property values. 12: /// </remarks> 13: [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:ValidateArgumentsOfPublicMethods")] 14: public static bool StringRequired(object target, RuleArgs e) 15: { 16: string value = (string)Utilities.CallByName( 17: target, e.PropertyName, CallType.Get); 18: if (string.IsNullOrEmpty(value)) 19: { 20: e.Description = string.Format(Resources.StringRequiredRule, RuleArgs.GetPropertyName(e)); 21: return false; 22: } 23: return true; 24: }?
?
使用方法也挺簡單,如下:
protected override void AddBusinessRules() { // TODO: add validation rules ValidationRules.AddRule(Csla.Validation.CommonRules.StringRequired, NameProperty); }轉載于:https://www.cnblogs.com/quluqi/archive/2011/05/18/2049486.html
總結
以上是生活随笔為你收集整理的Csla框架之业务与验证规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TableLayoutPanel闪烁问题
- 下一篇: 在PropertyGrid中使用密码显示