漫谈项目设计&重构&性能优化

重构的好处:
重构能够改进软件设计,随着项目需求的变更,项目体积的变大早已与最初的设计大相径庭,代码结构变得凌乱、复杂,如果不进行重构,则很难添加新的功能。

1、使项目代码更容易理解
很多情况下是由于项目赶进度和不注重质量导致的。那么通过重构可以帮助代码维持自己该有的形态。
项目开始的时候,设计并没有考虑到方方面面,因为你不可能预测到后面的所有需求。同时你也不能把每个功能都做预留,做成灵活可变,如果最后你预测失败,那么意味着你所做的灵活性是多余的,浪费了时间且增加了开发难度。这种情况叫做过度设计。
为了避免这样的情况,项目之初只做必要的设计。随着项目的变更,软件结构需要重新调整。通过重构可以改良最初的设计,使得项目符合最新的需求。

经验告诉我们,当下只管建造可运行的最简化的系统,至于灵活而复杂的设计,多数时候你都不会需要它。

2、帮助你找到BUG
重构需要你深入代码结构,这样使得你搞清楚程序结构的同时,找出隐含的BUG。

3、重构提高编码速度
重构后的代码,代码结构被改良,良好的设计能够加快开发速度。

重构与性能优化:
重构是为了让代码易于理解,你常会做出一些使程序运行变慢的修改。

重构的过程中,不要同时最求优化性能。特别当重构代码优化与性能优化两者出现冲突的时候
通常情况下重构会使代码优雅,性能优化为了提高性能不得不采用一些技巧来实现从而有可能使得代码变得复杂
而且,有时性能好坏不是单凭感觉出来,多了几个for循环带来的性能下降通常没有你想象中那么大,一定要量化,能测出数据来证明是否由此导致的性能下降。
此时要注意我们的目的是重构,重构的手法可能会使得软件性能有所下降,也应该往下执行。
性能优化属于另外一个关注点,等重构完成后,项目设计良好,此时再去做性能优化也更容易。

若仅凭感觉来决定说为了提高性能而放弃重构代码,这是一个错误的想法。

正确的做法是:
首先写出可运行的软件,然后调整它以求获得更快的速度。

如果当你在开发的过程中时刻追求软件的性能,首先会导致开发难度增加、开发时间变长。同时大多数情况下来分析,你会发现你花费的大部分时间都是在调整一些小部分的代码上以追求性能的增加,实际上这小部分代码最终被执行的概率没有你想象中的那么频繁。这意味着你大部分时间做的是无用功。
你所做的性能优化是你臆想出来的。
只有当你做出可运行的项目,并且对整个项目结构了解清楚之后,知道性能瓶颈在哪,有针对性的进行优化,通常会有意想不到的收获。

何时重构:
重构可以随时进行,不一定要专门腾出时间来进行重构。(当然,你也可以这么做,前提是团队的意见是一致,并征得老板同意,说服老板重构能够改良设计不仅代码质量提高同时加快开发速度。)
但注意一定要将重构和添加功能的两种状态进行划分,在重构的时候不要添加功能。否则你不知道BUG是重构时导致还是添加功能时导致,增加重构的难度。
这两种状态可以来回切换,但不能重叠。

何时不该重构:
项目已近最后期限,因为已经没有足够的时间重构

项目设计&重构&性能优化的更多相关文章

  1. 漫谈项目设计&重构&性能优化

    重构的好处:重构能够改进软件设计,随着项目需求的变更,项目体积的变大早已与最初的设计大相径庭,代码结构变得凌乱.复杂,如果不进行重构,则很难添加新的功能. 1.使项目代码更容易理解很多情况下是由于项目 ...

  2. 一个Web报表项目的性能分析和优化实践(五):重构有助于性能优化么?

    项目从初次开发到现在,已经快3年了.期间,有N个工程师参与过. 需求方面:增加减少,反反复复,无数次:人力方面:增加减少,不稳定:时间方面:功能开发着急上线,Bug开发紧急修复. 因此,代码臃肿,问题 ...

  3. 【腾讯Bugly干货分享】跨平台 ListView 性能优化

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/FbiSLPxFdGqJ00WgpJ94yw 导语 精 ...

  4. Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译

    本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...

  5. (转) Android开发性能优化简介

    作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以 ...

  6. T- SQL性能优化详解

    摘自:http://www.cnblogs.com/Shaina/archive/2012/04/22/2464576.html 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册 ...

  7. 【腾讯Bugly干货分享】微信读书iOS性能优化

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/578c93ca9644bd524bfcabe8 “8小时内拼工作,8小时外拼成长 ...

  8. Java的性能优化

    http://www.toutiao.com/i6368345864624144897/?tt_from=mobile_qq&utm_campaign=client_share&app ...

  9. 那些Android中的性能优化

    性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从哪开始说起. 首先要明白的是,为什么我们的App需要优化,最显而易见的时刻:用户say,什么狗屎,刷这么久都没反应 ...

随机推荐

  1. 【转】如何开启notepad++函数列表功能

    原文网址:http://jingyan.baidu.com/article/4b07be3c41e05e48b380f3f6.html Notepad++是window下特有的一款开源编辑器软件,相信 ...

  2. oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)

    1.简述  1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的.用来连接两张表的表达式组成了连接条件.当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合 ...

  3. javascript 四舍五入

    原生 javascript 中四舍五入的函数 toFixed(n) , n为要保留的小数位数. (0<= n <=20) var num=1.0999; console.log(num.t ...

  4. MapReduce的reduce函数里的key用的是同一个引用

    最近写MapReduce程序,出现了这么一个问题,程序代码如下: package demo; import java.io.IOException; import java.util.HashMap; ...

  5. CSAPP:cachelab(1)

    本项目大体上就是要求用C\C++来模拟cpu对cache的访问,然后统计hits.misses和eviction的次数.其实并没有想象中的那么难,感觉完全可以当成一道acm里面的大模拟题..下面就对这 ...

  6. linux内核--自旋锁的理解

    http://blog.chinaunix.net/uid-20543672-id-3252604.html 自旋锁:如果内核配置为SMP系统,自旋锁就按SMP系统上的要求来实现真正的自旋等待,但是对 ...

  7. RMAN-00554: initialization of internal recovery manager package failed RMAN-04005

    [oracle@rac11g1 ~]$ rman target haha/haha@rac11g Recovery Manager: Release 11.2.0.3.0 - Production o ...

  8. ceph主要数据结构解析2-Rados.h文件

    (1)文件系统id结构:16个字符组成 struct ceph_fsid { unsigned char fsid[16]; }; 以及对应的比较函数: static inline int ceph_ ...

  9. hdu1387之queue应用

    Team Queue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  10. 二叉树(二叉链表实现)JAVA代码

      publicclassTest{       publicstaticvoid main(String[] args){           char[] ch =newchar[]{'A','B ...