代码的重构

时间:2015年12月25日15:32:02

1、什么是重构?

重构就是调整程序的代码改善程序的质量、性能,使程序的设计模式和架构更加合理,提高软件的扩展性和维护性。

2、为什么都开发完成了再去重构它?为什么不是开始的时候就设计合理一点?

一个完美的预见未来的设计和可以容纳所有扩展的设计是不存在的,在程序设计的时候编程人员只能从大局方面去设计一个软件,无法做到滴水不漏的设计,而且很多需求是在开完成之后再去更改添加,功能的变化导致设计的调整在所难免,所以“测试在先,持续重构”的习惯十分重要。

来自为知笔记(Wiz)

时间: 2024-12-21 20:45:18

代码的重构的相关文章

应用MVP模式对遗留代码进行重构

AV(Autonomous View)自治视图 在面向终端用户的应用中,都需要一个可视化的UI来与用户交互.这个UI称为View视图. 在早期,我们习惯将所有前台的逻辑,与视图揉在一起,称为AV自治视图. 这些逻辑包括:数据呈现(Display),用户动作的扑捉与响应,数据存储等. 在.Net的Winform和ASP.NET Web Form中,采用的都是事件驱动模型. AV是将所有UI相关的逻辑都注册到视图本身,或者视图元素对应的事件上. 人机交互应用的3个关注点. 数据在UI上的展示. UI

服务器主逻辑代码的重构

不知道前主程是处于什么目的,总之我接手这套程序的时候,出现了超级多的问题,也发现了超级多的问题. 比如说吧,接受网络消息逻辑是线程独立的,而发送消息给客户端缺阻塞在了逻辑线程里面:原本可以放在一个进程里面处理的逻辑,却分散在了四个进程里面去处理,导致我完成一个功能,大部分时间要话费了进程之间的玩家信息的同步上面,在我无法忍受的情况下,我终于是用NIO将网络底层从新写了,而且将四个进程合并,但是在很多逻辑上还是尽量保持了和原逻辑处理的兼容! 先说说这个重构的底层吧! 我们看下最重要的ClientH

cocos2d-x 源码 :可以循环的CCScrollView (代码已经重构过,附使用方法)

1.准备工作 想弄懂可循环的CCscrollView,首先请阅读cocos2d-x本身的CCscrollView源码http://blog.csdn.net/u011225840/article/details/30033501(我已经添加注释,方便阅读). 2.源码展示 因为源码我想放到git上,所以注释都是用的英文,如果这部分源码有人有问题,请在评论区留言,我会逐一回答. 总体说下,CCCycleScrollview继承了CCscrollView以及CCscrollViewDelegate,

改代码OR重构?

最近团队中有人总在说“重构”一词,但是我认为他们其实想说的是“改代码”,只不过重构一词比较时髦,如此而已. 一个人的项目,自己瞎改,称之为重构没问题,但在团队中则不一定是好事,改代码的人自以为在改进,其他成员却认为他在改退的事情应该不罕见. 正如Kent Beck所言:一辆车在半山腰坏了,有一部分人要往山上推,有一部分人要往山下推,最终效果不言而喻! 所以,不是所有的改代码都叫重构,重构必须要有团队认可的原则和纪律.欲行重构之事的一个很好的做法是:所有团员都熟读<重构>一书. 如果“重构”对你

重构改善既有代码设计--重构手法05:Introduce Explaining Variable (引入解释性变量)

  发现:你有一个复杂的表达式. 解决:将该复杂的表达式(或其中的部分)的结果放进一个临时变量,并以此变量名称来解释表达式用途. //重构前 if((platform.toUpperCase().indexOf("MAC") > -1) && (browser.toUpperCase().indexOf("IE") > -1) && wasInitialized() && resize > 0) {

重构改善既有代码设计--重构手法07:Remove Assignments to Parameters (移除对参数的赋值)

代码对一个 参数赋值.以一个临时变量取代该参数的位置.     int Discount(int inputVal, int quantity, int yearTodate) { if (inputVal > 50) { inputVal -= 2; } } 重构后: int Discount(int inputVal, int quantity, int yearTodate) { int result=inputVal; if (inputVal > 50) { result -= 2;

重构改善既有代码设计--重构手法04:Replace Temp with Query (以查询取代临时变量)

所谓的以查询取代临时变量:就是当你的程序以一个临时变量保存某一个表达式的运算效果.将这个表达式提炼到一个独立函数中.将这个临时变量的所有引用点替换为对新函数的调用.此后,新函数就可以被其他函数调用. 例子如下: double basePrice = _quantity*_itemPrice; if (basePrice > 1000) { return basePrice * 0.95; } else { return basePrice * 0.98; } 重构之后代码: if (BasePr

重构改善既有代码设计--重构手法16:Introduce Foreign Method (引入外加函数)&amp;&amp; 重构手法17:Introduce Local Extension (引入本地扩展)

重构手法16:Introduce Foreign Method (引入外加函数)你需要为提供服务的类增加一个函数,但你无法修改这个类.在客户类中建立一个函数,并以第一参数形式传入一个服务类实例. 动机:这种事情发生了太多次了,你正在使用一个类,它真的很好,为你提供了需要的所有服务.而后,你又需要一项新服务,这个类却无法供应.于是你开始咒骂“为什么不能做这件事?”如果可以修改源码,你便可以自行添加一个新函数:如果不能,你就得在客户端编码,补足你要的那个函数. 如果客户类只使用这项功能一次,那么额外

重构改善既有代码设计--重构手法09:Substitute Algorithm (替换算法)

你想要把某个算法替换为另一个更清晰地算法.将函数本体替换为另一个算法. string FoundPerson(string[] people) { for (int i = 0; i < people.Length; i++) { if (people[i].Equals("don")) { return "don"; } if (people[i].Equals("john")) { return "john"; }

重构改善既有代码设计--重构手法 之重新组织你的函数总结

前面讲了那么多的重构手法,估计学完后都会忘记,因此暂停下脚本,总结下,其实前面的所有重构手段,围绕一个主题:函数.即对函数的优化:为此首先一个函数里面代码很长,那么此时我们要做的就是提炼函数. 提炼函数的过程中,我们会产生新的函数,这个时候最重要的就是,是否有变量的引用,如果没有,那么这个函数很好提炼:如果有,那么就看是否会在子函数或者说新拆的函数中会对其赋值操作,如果没有赋值操作,那么也很简单,那么就直接将这个变量以参数的形式传入进去.那么最麻烦的就是,在拆出来的函数中会引用到原函数中的变量: