SUMMARY
- 用途
- DEMO演示
- NuGet相關的資料
- VS工具端的設置
用途
數據驗證的作用很重要,目前.NET提供的內建驗證機制是采用DataAnnotation方式來實現屬性的驗證,並且也提供了很多驗證Attribute,如下圖:

不過缺點也有:
- 沒有基於場景的驗證支持
- 如訂單Entity
- 如果是PC錄入,則要求驗證完整的屬性有效性
- 如果是Mobile錄入,則要求驗證一部分屬性有效性
- 如果是后台admin錄入,則要求最小屬性有效性
- 如訂單Entity
- 硬編碼導致不靈活
- 生產環境中的維護成本,重新編譯、測試、上線
- 管理人員無法修改規則,只能通過開發部門
基於上述2點,做了些改進,填補上述缺點
DEMO演示
先建立工程,然后用NuGet工具引用A2DFramework.BusinessExceptionService:

public class OrderEntity { [Required] [RuleMobileAttribute("PC錄入")] //這個是A2DFramework提供的驗證屬性,構造函數中標明場景名 public string FirstName { get; set; } public string LastName { get; set; } public string Mobile { get; set; } } class Program { static void Main(string[] args) { A2DFramework.Starter.Init(); A2DFramework.RuleEngine.Starter.Init(); A2DFramework.BusinessExceptionService.Starter.Init(); OrderEntity user = new OrderEntity(); user.FirstName = ""; Console.WriteLine("=========無場景驗證,既執行基本驗證=========="); foreach (var error in user.IsValid ())//基本驗證用法,不會驗證場景 { string msg = string.Format("key: {0}, msg: {1}", error.Key, error.Message); Console.WriteLine(msg); } Console.WriteLine("==========有場景驗證 [PC錄入]========="); foreach (var error in user.IsValid("PC錄入") )//場景驗證方式,參數中傳入場景名 { string msg = string.Format("key: {0}, msg: {1}", error.Key, error.Message); Console.WriteLine(msg); } Console.ReadKey(); } }
場景部分驗證規則可硬編碼在C#代碼中,也可以extract到xml中:
A2D.config: <?xml version="1.0" encoding="utf-8" ?> <A2D> <BusinessExceptionService configSource ="A2D.BusinessExceptionService.config"> </BusinessExceptionService> </A2D> A2D.BusinessExceptionService.config: <?xml version="1.0" encoding="utf-8" ?> <A2D> <BusinessExceptionService> <Scene Name="場景1"> <EntityType Type="ConsoleApplication12.OrderEntity, ConsoleApplication12"> <Rule RuleType="PropertyValidator " FailAction="Warning" PropertyName="LastName" ErrorMessage="LastName值不能大於10"> <![CDATA[ value!=null&&value.length<=10 ]]></Rule> <Rule RuleType="ClassValidator" FailAction="Warning" ErrorMessage="FirstName與LastName不相符"> <![CDATA[ value!=null &&value.FirstName!=null &&value.LastName!=null &&value.FirstName===value.FirstName ]]> </Rule> </EntityType> </Scene> </BusinessExceptionService> </A2D>
RuleType允許的值有兩種:PropertyValidator和ClassValidator。分別代表驗證屬性、驗證整個Entity。
Rule內容采用javascript寫法,如果當前RuleType為PropertyValidator,則value代表當前屬性值
如果當前RuleType為ClassValidator,則value代表當前Entity
執行結果:

NuGet相關的資料
NuGet學習筆記(1)——初識NuGet及快速安裝使用
http://kb.cnblogs.com/page/143190/
NuGet學習筆記(2)——使用圖形化界面打包自己的類庫
http://kb.cnblogs.com/page/143191/
NuGet學習筆記(3)——搭建屬於自己的NuGet服務器
http://kb.cnblogs.com/page/143192/
VS工具端的設置

