`
xiaodatao
  • 浏览: 16611 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

谈谈代码重构[转]

阅读更多
    开发人员可能听到过"bad smell"这个词,这个词用在软件编码中是什么意思呢? 代码还有smell吗?当然没有,正如计算机病毒,bug等词一样,这只是个形象的说法。这个词在这里的意思是代码实现了需求,但是代码却不精炼,冗余,结构混乱,难读懂,难维护,难扩展等等。与之相对应的一个词是"refactor",即代码重构。我们在看些外国人写的程序时可以发现,他们的代码里一般会定义大量的类、接口、方法,类与类,类与接口之间很多是继承和实现的关系,方法的代码行数很少,超过20行代码的方法不多,看他们的代码感觉最多的就是方法之间的调来调去,不像我们的代码,一个方法下来几十上百甚至两三百行都是最基本的语句构成,很少调用自己的方法。两相比较,可以看出,前者在结构上更清晰,通过类视图就可看出设计意图,并且总的代码量不会高于后者,而后者代码量庞大,代码冗余现象严重,结构不清晰,很难维护,如要修改某个错误,可能涉及到要修改的代码点很多,这样后来的维护者就很头疼了。造成这种状况的原因有这样一些:

1.经验不足,分析设计不到位

2.敏捷开发,虽然经验很多,但为了快速开发,没有经过分析设计

3.缺乏意识,只为实现功能而写代码,不管代码质量

对于这样的代码,我们怎样将其变得更为精炼和易于维护呢?这就是代码重构。重构不是针对功能,纯粹是对代码本身。重构后的代码不会影响到系统的运行。

我们来看看可以在哪些方面对代码进行重构:

1.重命名:对类,接口,方法,属性等重命名,以使得更易理解

2.抽取代码:将方法内的一段代码抽取为另一个方法,以使得该段代码可以被其他方法调用,这是重构中很重要很常用的,此举可以极大的精炼代码,减少方法的代码行数

3.封装字段:将类的某个字段转换成属性,可以更加合理的控制字段的访问

4.抽取接口:将类的某些属性,方法抽取组成个接口,该类自动实现该接口

5.提升方法内的局部变量为方法的参数:这主要是在写代码的过程中会使用到

6.删除参数:将方法的一个或多个参数删掉

7.重排参数:将方法的参数顺序重新排列

实际应用中,用的最多的是1、2、3,我们可以在写代码的时候有意识的运用代码重构,这样当我们完成编码时代码的质量也能得到保证。



本文来自CSDN博客,出处:http://blog.csdn.net/weiky626/archive/2007/05/10/1602691.aspx
分享到:
评论

相关推荐

    一个页面重构工程师眼中的“用户体验”

    如今,工业化设计已经融入到了...本文从一个页面重构工程师的角度出发,从两个方面谈谈作者所理解的用户体验,以及作者做了哪些和用户体验有关的事情。随着视觉设计的发展,按钮、链接或者导航菜单的表现方式变得异常丰

    二十三种设计模式UML类图

    所以,下面的章节中,在谈模式的同时,我也会谈谈关于常用的这些模式的重构成本的理解。重构成本越高意味着,在遇到类似的问题情形的时候,我们更应该 提前考虑应用对应的设计模式,而重构成本比较低则说明,类似的...

    没有单元测试,何谈重构

    通俗解释下就是电动门有个小bug,电动座椅又有个小bug,一堆小bug最终导致的大bug,人命关天了,本篇就来谈谈软件开发中避免小bug的技术:单元测试。本文将介绍以下内容:1.iOS开发中添加单元测试的方法。2.如何写...

    前端面试题基础篇293题

    包含第一部分html,第二部分CSS,第三部分...第十部分综合问题,如谈谈你对重构的理解、什么样的前端代码是好的、对前端工程师这个职位怎么理解、前端的价值体现在哪,最后整理了一些常常见问题无具体答案内容的。

    移动端iOS组件化详解.docx

    手机APP已经成为了与我们生活紧密关联的一部分,各种应用场景也都已经落地到了手机移动端,但这也使得APP的业务模块以及对应的代码量越来越繁多,旧的开发架构已经没法满足业务快速发展的需求,重构整合也就成为了不...

    asp.net知识库

    HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的...

    Hadoop实战中文版

    6.3 性能调优 6.3.1 通过combiner来减少网络流量 6.3.2 减少输入数据量 6.3.3 使用压缩 6.3.4 重用JVM 6.3.5 根据猜测执行来运行 6.3.6 代码重构与算法重写 6.4 小结 第7章 细则手册 7.1 向任务传递作业...

    Hadoop实战(陆嘉恒)译

    编程实践6.1 开发MapReduce 程序6.1.1 本地模式6.1.2 伪分布模式6.2 生产集群上的监视和调试6.2.1 计数器6.2.2 跳过坏记录6.2.3 用...JVM6.3.5 根据猜测执行来运行6.3.6 代码重构与算法重写6.4 小结第7 章...

    HuddleUp:一款专注于接送运动的社交应用,可让用户根据他们选择的运动和技能水平与他人联系

    查看需要重构的代码 计划下一次站起来之前需要做的事情 如果有任何宝石或炫酷的技术高峰,请与团队分享闪电般的谈话 Git工作流程 取小的垂直切片 经常提交 垂直包括 测试:单元,控制器,水豚,茉莉 楷模 控制器 ...

    Hadoop实战

    1286.3 性能调优 1296.3.1 通过combiner来减少网络流量 1296.3.2 减少输入数据量 1296.3.3 使用压缩 1296.3.4 重用JVM 1326.3.5 根据猜测执行来运行 1326.3.6 代码重构与算法重写 1336.4 小结 134第7章 细则手册 ...

    Hadoop实战中文版.PDF

    1296.3.3 使用压缩 1296.3.4 重用JVM 1326.3.5 根据猜测执行来运行 1326.3.6 代码重构与算法重写 1336.4 小结 134第7章 细则手册 1357.1 向任务传递作业定制的参数 1357.2 探查任务特定信息 1377.3...

    Struts in Action中文版

    2.1. 随便谈谈...............................................................................................................38 2.2. 为什么我们需要 Struts.................................................

    struts in Action

    2.1. 随便谈谈...............................................................................................................38 2.2. 为什么我们需要Struts ..................................................

Global site tag (gtag.js) - Google Analytics