可擴展驗證框架 - A2DFramework驗證框架使用介紹


SUMMARY

  • 用途
  • DEMO演示
  • NuGet相關的資料
  • VS工具端的設置

 

用途

數據驗證的作用很重要,目前.NET提供的內建驗證機制是采用DataAnnotation方式來實現屬性的驗證,並且也提供了很多驗證Attribute,如下圖:

 

 

不過缺點也有:

  • 沒有基於場景的驗證支持
    • 如訂單Entity
      • 如果是PC錄入,則要求驗證完整的屬性有效性
      • 如果是Mobile錄入,則要求驗證一部分屬性有效性
      • 如果是后台admin錄入,則要求最小屬性有效性
  • 硬編碼導致不靈活
    • 生產環境中的維護成本,重新編譯、測試、上線
    • 管理人員無法修改規則,只能通過開發部門

基於上述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工具端的設置

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM