• 编码原则:表驱动法


    背景

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

    表驱动法

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

    场景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个设计模式?

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

  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/happyframework/p/4114718.html
Copyright © 2020-2023  润新知