国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

通用可擴展過濾器的開發(背景 過程 收獲)付源碼

2019-11-17 02:33:19
字體:
來源:轉載
供稿:網友

通用可擴展過濾器的開發(背景 過程 收獲)付

  分析上面的需求,我們需要通過以下幾個步驟來構建一個自定義過濾器:

  1. 識別特性,定義枚舉。很容易的發現,需求中包含兩個特性,分別是【長度不小于3】和【包含1】,因此,我們定義一個枚舉如下
        [Flags]    public enum DemoStringEnumType    {        /// <summary>        /// 長度大于3        /// </summary>        LongLen = 1,        /// <summary>        /// 包含1        /// </summary>        HasOne = 2,         /// <summary>        /// 無效值        /// </summary>        NN = 1024    }

  2. 繼承基類,構建自定義過濾器對象。基類泛型需要兩個參數,分別是【待處理數據的數據類型】以及【特性的枚舉類型】
        public class StringFilterCore : ComplexFilterCore<string, DemoStringEnumType>    {    }

  3. 開發過濾器。不難發現,需求中的過濾器,就是去【判斷下一個字符串是否是整數】
       /// <summary>    /// 是否是整數過濾器    /// 繼承IFilter    /// </summary>    public class IsNumberFilter : IFilter<string>    {        /// <summary>        /// 判斷字符串是否為政策        /// </summary>        /// <param name="item">待檢驗字符串</param>        /// <returns>bool</returns>        public bool DoFilter(string item)        {            int tem;             return int.TryParse(item, out tem);        }    }

  4. 開發識別器。
        /// <summary>    /// 識別器    /// 繼承IEnumTypeIdentifier接口    /// </summary>    public class IdentifyDemoString : IEnumTypeIdentifier<string, DemoStringEnumType>    {        /// <summary>        /// 識別對象特性        /// </summary>        /// <param name="item">待識別字符串</param>        /// <returns>DemoStringEnumType</returns>        public DemoStringEnumType IdentifyItemTypeAsEnumType(string item)        {            //初始化結果            DemoStringEnumType result = DemoStringEnumType.NN;            //識別長度是否大于3            if (item.Length > 3)            {                result |= DemoStringEnumType.LongLen;            }            //識別是否包含1            if (item.Contains("1"))            {                result |= DemoStringEnumType.HasOne;            }            return result;        }    }

  5. 構建客戶端,調試代碼。
            static void Main(string[] args)        {            //初始化過濾器            StringFilterCore demoStrFilterCore = new StringFilterCore();            //初始化 HasOne 2 LongLen 1            demoStrFilterCore.SetMinGetCount(DemoStringEnumType.LongLen, 1);            demoStrFilterCore.SetMinGetCount(DemoStringEnumType.HasOne, 2);            //注冊類型識別器 識別特性 DemoStringEnumType            demoStrFilterCore.RegistEnumTypeIdentifier(new IdentifyDemoString());            //添加過濾器 過濾掉不是整數的字符串            demoStrFilterCore.AddFilter(new DemoStringContentFilter());            //初始化數據源            var ls = new List<string> { "123", "246", "b", "15", "16", "a32" };            //執行過濾            var result = demoStrFilterCore.GetFilteredResult(ls);            //打印結果            Console.WriteLine(string.Join(",", result.Keys));            Console.ReadKey();        }

收獲

  抽象出通用的部分,讓開發人員只關注于業務是框架存在的一大必要因素。本文提出的過濾方案具有很高的擴展性,有興趣的同學可以下載demo研究下。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰顺县| 渝北区| 巨鹿县| 大足县| 江阴市| 张掖市| 兴安县| 凤冈县| 洞口县| 临朐县| 蓬溪县| 河源市| 永济市| 柘荣县| 沽源县| 曲靖市| 五大连池市| 金华市| 昂仁县| 吉安市| 昭苏县| 东明县| 临潭县| 亳州市| 庆城县| 静海县| 安吉县| 新沂市| 保德县| 库车县| 邢台市| 丽江市| 三台县| 肇庆市| 宝丰县| 高清| 牟定县| 卢氏县| 滨海县| 南郑县| 游戏|