zoukankan      html  css  js  c++  java
  • 编码原则:表驱动法

    背景

    表驱动法,最早接触这个概念是看《代码大全》,之前也在不自觉的应用,本文对这一个概念再做简短的总结。

    表驱动法

    说明这个概念之前最好先给出不使用这个概念的代码,常见的需要使用表驱动的场景有如下三种情况:

    场景1:不同条件不同数据

    if (key = "Key A")
    {
       处理 Key A 相关的数据
    }
    else if (key = "Key B")
    {
       处理 Key B 相关的数据
    }

    场景2:不同条件不同行为

    if (key = "Key A")
    {
       执行 Key A 相关的行为
    }
    else if (key = "Key B")
    {
       执行 Key B 相关的行为
    }

    场景3:不同条件依次执行

    执行 Key A 相关的行为
    执行 Key B 相关的行为

    有了上面三种场景,再理解表驱动法就比较直观了,直接看表驱动的代码:

    表 = {
         "Key A": { "数据项": "数据", "行为项": "行为" },
         "Key B": { "数据项": "数据", "行为项": "行为" }
    };

    注:很多语言都支持将“行为”作为一等公民,如:C和C++的函数指针、C#的委托、JS的函数等。

    有这样一个表以后,替换上面的三种代码就非常直接了,这里不再赘述。

    思考

    使用OO替换表驱动法

    对于某些不支持OO的语言,表驱动法非常有用,对于支持OO的语言,如果表中的数据项和行为项总数如果超过了3个,建议引入简单的继承体系,将数据项和行为项目提取为新类型体系的成员,然后将表修改为工厂。

    表的Key能否为“行为”

    当然可以,只是在从表中获取行时,使用这个“行为”决定是否返回行。

    如何用表驱动法模拟23个设计模式?

    完全有可能的,有兴趣的朋友可以模拟一下管道过滤器模式(这个是架构模式)。

  • 相关阅读:
    leetcode_24. 两两交换链表中的节点
    Mysql大数据量分页优化
    MySQL 默认排序是什么
    spring注入map,spring注入一个接口的多个实现类在map里
    eureka缓存细节以及生产环境的最佳配置
    MySQL 5.7性能调优
    安装后的十个MySQL性能调整设置(版本:5.1、5.5 和5.6)
    docker部署tomcat应用和MySQL数据库
    MySQL热备工具Xtrabackup
    MySQL数据库的冷备方式
  • 原文地址:https://www.cnblogs.com/happyframework/p/4114718.html
Copyright © 2011-2022 走看看