在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

数据驱动之表驱动编程

C# 清风 249℃ 0评论
前提背景在清理以前相关代码时候,发现了之前使用表驱动的部分函数。所以,在这里简要的记录一下。

定义

数据驱动编程的核心出发点是相对于程序逻辑,人类更擅长于处理数据。数据比程序逻辑更容易驾驭,所以我们应该尽可能的将设计的复杂度从程序代码转移至数据。

所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获指定的数据内容。

常用的查表方式

  • 直接查询
  • 索引查询
  • 分段查询

如果要把星期几用中文输出,无论是用if语句或switch语句都比较臃肿,如下:


        static string GetChineseWeek(DayOfWeek week)
        {
            switch (week)
            {
                case DayOfWeek.Monday:
                    return "星期一";
                case DayOfWeek.Tuesday:
                    return "星期二";
                case DayOfWeek.Wednesday:
                    return "星期三";
                case DayOfWeek.Thursday:
                    return "星期四";
                case DayOfWeek.Friday:
                    return "星期五";
                case DayOfWeek.Saturday:
                    return "星期六";
                case DayOfWeek.Sunday:
                    return "星期日";
                default:
                    throw new ArgumentOutOfRangeException("DayOfWeek", "星期值超出范围");
            }
        }
  • 可读性不高
  • 重复代码
  • 可扩展性差

使用表驱动方式如下:


        static void Main(string[] args)
        {
            
            Console.WriteLine(GetChineseWeekPlus(DateTime.Today.DayOfWeek));
            Console.Read();
        }
        static string GetChineseWeekPlus(DayOfWeek week)
        {
            string[] chineseWeek = { "星期日","星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
            return chineseWeek[(int)week];
        }

表驱动的方式优势

  • 提高了程序的可读性。
  • 减少了重复代码。
  • 可扩展性。
  • 降低了复杂度。

像这种表驱动的使用的地方还有很多,例如:返回哪年哪月多少天。


        static void Main(string[] args)
        {
            
            Console.WriteLine(DayOfMonths(2019,2).ToString());
            Console.Read();
        }
        public static int DayOfMonths(int year, int month)
        {
            int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            if (DateTime.IsLeapYear(year))
            {
                return ++months[--month];
            }
            return months[--month];
        }

当然,在C#中判断哪年哪月有多少天也没有那么复杂,因为系统已经提供了相关函数。如下:


        static void Main(string[] args)
        {
            
            Console.WriteLine(DateTime.DaysInMonth(2019,2).ToString());
            Console.Read();
        }

转载请注明:清风博客 » 数据驱动之表驱动编程

喜欢 (9)or分享 (0)
支付宝扫码打赏 微信打赏
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址