以一则LUA实例说明敏捷开发中“分离构造和使用”原则
分离构造和使用
构造含义是功能的实现, 此功能是一个定义明确的处理过程, 开放出明确的接口给调用者使用。
则使用者可以直接调用接口进行使用, 但是使用者需要搞清楚, 那些是构造, 那些是使用。
不要再使用的地方, 将构造的代码也实现。 否则, 构造的代码会淹没掉 使用地方的 业务逻辑。
LUA需求
在一个lua表中, 查询指定参数名称的参数值, 并将此参数值转换为 html encode编码方式。
instData = {
[“para”] = “paravalue<”,
[“para1”] = “paravalue1”,
}
要实现这种编码转换, 将html敏感的字符进行转义。例如 将 < 转换为 <;
instData.para ---> paravalue<
分析:
实现上分为两个步骤:
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实例说明敏捷开发中“分离构造和使用”原则的更多相关文章
- 敏捷开发中的sprint是什么意思_百度知道
敏捷开发中的sprint是什么意思_百度知道 敏捷开发中的sprint是什么意思 未成年RB21 | 浏览 4208 次 推荐于2016-02-27 15:19:02 最佳 ...
- 如何编写敏捷开发中的user story
http://blog.csdn.net/chengyb74/article/details/4762247 对于敏捷开发来说,User Story是开发的基础,它不同于传统的瀑布式开发方式,而是把原 ...
- 敏捷开发中的Scrum流程和术语【转】
任何人力流程都离不开人来执行,所以在讲解Scrum流程之前,有必要先把Scrum中的角色讲一下. 一天,一头猪和一只鸡在路上散步,鸡看了一下猪说,“嗨,我们合伙开一家餐馆怎么样?”,猪回头看了一下鸡说 ...
- 敏捷开发中如何做好Sprint规划?
什么是Sprint规划? Sprint规划是scrum中用来启动Sprint的事件.迭代规划的目标是定义Sprint可以交付的内容,以及如何完成各项工作.迭代规划需要整个scrum团队合作完成. 与体 ...
- CMMI V2.0丨如何通过CMMI真正在企业中的实施规模化敏捷开发
在过去的几年中,敏捷开发已经从一个利基概念(利基是指针对企业的优势细分出来的市场,这个市场不大,而且没有得到令人满意的服务.产品推进这个市场,有盈利的基础.)转变为全球许多大公司采用的标准实践. 通过 ...
- 传统瀑布式&敏捷开发
---传统瀑布式 瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求.分析.设计.编码.测试的步骤顺序进行. 步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等等. 瀑布式 ...
- 瀑布式开发、迭代开发、敏捷开发、XP与SCRUM的区别
瀑布式开发.迭代开发,区别[都属于,生命周期模型] 两者都是一种开发模式,就像设计模式一样,考虑的角度不一样,个人感觉谈不到取代一说. 传统的瀑布式开发,也就是从需求到 ...
- 敏捷开发--scrum
1. 请简述一下什么是敏捷开发(Agile Development),以及什么是持续集成. 敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个 ...
- 关于敏捷开发方法(Agile Software Development)的阅读笔记
对“敏捷开发”(Agile Software Development)这个词,我是在这学期邹欣老师<现代程序设计>课上第一次听到的,刚听到时并不知道其具体指什么,只是从字面上直觉其意思应该 ...
随机推荐
- Leetcode SortList
Sort a linked list in O(n log n) time using constant space complexity. 本题利用归并排序即可 归并排序的核心是将两部分合成一部分, ...
- 【搬运工】NOIP吧置顶贴
目的是存置顶贴里的链接.. 原帖:http://tieba.baidu.com/p/1753284199 资源站:*C++资源:http://tieba.baidu.com/p/1239792581* ...
- 【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树
没什么好说的. 可持久化线段树,叶子节点存放父亲信息,注意可以规定编号小的为父亲. Q:不是很清楚空间开多大,每次询问父亲操作后修改的节点个数是不确定的.. #include<bits/stdc ...
- Android studio 一个项目中添加两个module遇到的bug
1.在一个Android studio中,我添加了一个模块,然后就是各种bug 找到到R 是在module 名上面 右键 Make Module '模块名' 经过各种google 的时候发现了 htt ...
- IE6及以上版本fixed问题解决方案,页面右下角固定页面,可以最大化、最小化、正规显示
在窗口固定位置显示内容使用fixed,但是 IE 6 不支持,后来我搜了很多方法,都没有作用,后来类比着一个网站的代码,使用absolute .z-index解决了问题. 页面div结构: <d ...
- 1063. Set Similarity (25)
1063. Set Similarity (25) 时间限制 300 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given ...
- Hadoop_初识
一. 什么是Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序. 充分利用集群的威力进行高速运算和存储. Hado ...
- respond.min.js IE失效问题
respond.min.js 用于解决 ie6-ie8媒体查询 兼容问题: 1. 需把文件置于服务器上,iis下运行 2.包含媒体查询的 css文件需 采用外链形式 3.头部引用的respond.m ...
- ajaxfileupload.js支持多文件上传【转载】
//修改前代码------- //var oldElement = jQuery('#' + fileElementId); //var newElement = jQuery(oldElement) ...
- 表单的enctype property
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码. 默认地,表单数据会编码为 "application/x-www-form-urlencoded".就是说,在 ...