• 以一则LUA实例说明敏捷开发中“分离构造和使用”原则


    分离构造和使用

    构造含义是功能的实现, 此功能是一个定义明确的处理过程, 开放出明确的接口给调用者使用。

    则使用者可以直接调用接口进行使用, 但是使用者需要搞清楚, 那些是构造, 那些是使用。

    不要再使用的地方, 将构造的代码也实现。 否则, 构造的代码会淹没掉 使用地方的 业务逻辑。

    LUA需求

    在一个lua表中, 查询指定参数名称的参数值,  并将此参数值转换为 html encode编码方式。

    instData = {

    [“para”] = “paravalue<”,

    [“para1”] = “paravalue1”,

    }

    要实现这种编码转换, 将html敏感的字符进行转义。例如 将 < 转换为 &lt;

    instData.para   --->  paravalue&lt;

    分析:

    实现上分为两个步骤:

    1、 找到 para参数的值

    2、 对参数值进行转义

    不分离构造和使用的实现

    给table定一个函数叫 GetHTMLCode, 同时实现查找和转码的工作:

    table.GetHTMLCode = function(self, paraname)

    local val = self[paraname]

    local transhtml = function 。。。。

    local html = trans2html(val)

    return html

    end

    使用:

    instData.GetHtmlCode(instData, "para")

    instData:GetHtmlCode("para")

    问题:

    1、 table添加了 获取参数值, 并执行html转码的行为。 混乱了table的一般性功能, table只负责寻找具体的参数值, 但是html转码不应该table负责。table提供GetParaValue接口就足够了,  职责尽量单一。

    2、 trans2html在此接口中实现,违背分离构造和使用的场景。

    分析:

    本例子中, 需要两处构造:

    1、 table 添加 GetParaValue 接口的实现构造。

    2、 string 添加转为 html code的 tohtmlcode 接口的实现构造。

    然后本例子中一处使用:

    即 目标table获取参数值,然后转换为htmlcode。

    分离工作和使用的lua例子改写

    先执行string的tohtmlcode转换

    string.tohtmlcode = function(self)

    return 。。。

    end

     

    然后添加table的 获取参数值的 接口实现:

    table.GetParaValue = function(self, paraname)

       ……

    end

     

    最后使用:

    instData:GetParaValue(“para”).tohtmlcode()

     

    多么优美!!

    这就是unix编程艺术的杰出体现, 系统上有很多多如牛毛的小程序, 各个耽搁没有什么特殊的地方,

    但是一旦组合起来使用, 则会发挥无穷的威力。

  • 相关阅读:
    C# 开发Chrome内核浏览器(WebKit.net)
    SQL 存储过程语句拼接愁人的时间类型
    Linux简介
    揭秘Node.js深受欢迎的原因
    6个强大的AngularJS扩展应用
    ElasticSearch NEST
    web中的各种打印方案
    配置问题总结
    leetcode -day29 Binary Tree Inorder Traversal &amp; Restore IP Addresses
    HBase高速导入数据--BulkLoad
  • 原文地址:https://www.cnblogs.com/lightsong/p/5449747.html
Copyright © 2020-2023  润新知