分离构造和使用

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

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

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

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编程艺术的杰出体现, 系统上有很多多如牛毛的小程序, 各个耽搁没有什么特殊的地方,

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

以一则LUA实例说明敏捷开发中“分离构造和使用”原则的更多相关文章

  1. 敏捷开发中的sprint是什么意思_百度知道

    敏捷开发中的sprint是什么意思_百度知道     敏捷开发中的sprint是什么意思    未成年RB21 | 浏览 4208 次    推荐于2016-02-27 15:19:02     最佳 ...

  2. 如何编写敏捷开发中的user story

    http://blog.csdn.net/chengyb74/article/details/4762247 对于敏捷开发来说,User Story是开发的基础,它不同于传统的瀑布式开发方式,而是把原 ...

  3. 敏捷开发中的Scrum流程和术语【转】

    任何人力流程都离不开人来执行,所以在讲解Scrum流程之前,有必要先把Scrum中的角色讲一下. 一天,一头猪和一只鸡在路上散步,鸡看了一下猪说,“嗨,我们合伙开一家餐馆怎么样?”,猪回头看了一下鸡说 ...

  4. 敏捷开发中如何做好Sprint规划?

    什么是Sprint规划? Sprint规划是scrum中用来启动Sprint的事件.迭代规划的目标是定义Sprint可以交付的内容,以及如何完成各项工作.迭代规划需要整个scrum团队合作完成. 与体 ...

  5. CMMI V2.0丨如何通过CMMI真正在企业中的实施规模化敏捷开发

    在过去的几年中,敏捷开发已经从一个利基概念(利基是指针对企业的优势细分出来的市场,这个市场不大,而且没有得到令人满意的服务.产品推进这个市场,有盈利的基础.)转变为全球许多大公司采用的标准实践. 通过 ...

  6. 传统瀑布式&敏捷开发

    ---传统瀑布式 瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求.分析.设计.编码.测试的步骤顺序进行. 步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等等. 瀑布式 ...

  7. 瀑布式开发、迭代开发、敏捷开发、XP与SCRUM的区别

    瀑布式开发.迭代开发,区别[都属于,生命周期模型]         两者都是一种开发模式,就像设计模式一样,考虑的角度不一样,个人感觉谈不到取代一说.         传统的瀑布式开发,也就是从需求到 ...

  8. 敏捷开发--scrum

    1.  请简述一下什么是敏捷开发(Agile Development),以及什么是持续集成.  敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个 ...

  9. 关于敏捷开发方法(Agile Software Development)的阅读笔记

    对“敏捷开发”(Agile Software Development)这个词,我是在这学期邹欣老师<现代程序设计>课上第一次听到的,刚听到时并不知道其具体指什么,只是从字面上直觉其意思应该 ...

随机推荐

  1. Android LocalBroadcastManager 与 BroadcastReceiver

    Android中BroadcastReceiver主要用途有 发送通知,更新UI或者数据,应用程序间相互通信,监听系统状态(比如开机,网络等) Android中发送广播的方式: 普通广播:无论优先级大 ...

  2. Android: Service中创建窗口显示

    WindowManager.LayoutParams: int TYPE_SYSTEM_ALERT  Window type: system window, such as low power ale ...

  3. Javascript与当前项目的思考

      主体 分为以下三部分,能力.经验有限,欢迎拍砖. 1.低效的代码 2.面向对象的重构重复利用代码 3.调试的经验总结 第一部分 日常中低效的代码 加载和运行 <html> <he ...

  4. BZOJ4551: [Tjoi2016&Heoi2016]树

    Description 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标 ...

  5. url 转码

    //URL解码 //-(NSString *)URLDecodedString:(NSString *)str //{ // NSString *decodedString=(__bridge_tra ...

  6. linux下创建,删除,移动文件命令

    创建文件:touch + filename 删除文件:rm + filename 复制文件:cp + filename + dirname 移动文件:mv + filename + dirname 注 ...

  7. CentOS7配置双网卡绑定

    配置team0配置文件: [root@CentOS7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-team0DEVICE=team0DEVICETYPE= ...

  8. fn标签常用方法使用说明

    需要jstl.jar包,然后在jsp页头导入 <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix=& ...

  9. emmet常用的输入

    开始体验:输入以下简写,按tab键 html:5 html:4t html:4s html:xxs ul#nav>li.itemS*4>a{Item $} <ul id=" ...

  10. logback使用总结

    filter: http://aub.iteye.com/blog/1110008 http://aub.iteye.com/blog/1101222 Logback Log4j的创始人Ceki Gü ...