重构与反思-<重构代码的7个阶段>有感
https://coolshell.cn/articles/5201.html/comment-page-2#comment-1932554
过去半年基本上完整经历了这个文章的各个阶段,看完文章结合自己的经历,发现的确有些值得反思,但是哪怕过程太痛苦,但如果是一个自己要长期维护的模块,”至少亲生的bug更好看些吧”,如果一开始的需求就复杂,没有条理,代码第一版设计者没有充分的和需求方整理需求,盲目编码形成第一版难以维护的代码,后面的人几乎不可能根据代码还原出需求的原貌,甚至是需求方自己也很难确定自己最初的想法是什么样的,我们在重构代码的起点往往是一些难缠的bug或者新需求,因为要解决这些bug,或者实现新需求,发现原来的设计把所有路都堵死了,后来的人如果是追求完美的程序员,就会陷入这种境地,而和第一个程序员一样的人,会用更加不优雅的方式把新的代码黏在原来的代码上,直到遇到一个追求完美的程序员,或者给需求方说,这个我们做不到.原因不是技术瓶颈,而是我们做的不好,或者前人做的不好.
所以哪怕直到有这几个阶段,如果不试一下,也许永远被噩梦缠绕,如果做一下,后面最差也就是亲生了一个跛脚的框架.这过程中,对需求的把握,对未来的预期远远比一步不走要好的多.
这里的几个阶段,第五阶段是转折点,这里看你是不是一个彻底的完美主义者,如果是,时间不足的情况下,你可以选择短时间在自己底线内做些忍让,但是哪怕到了最后一个阶段,那个站起来说重构的人,我希望是我自己,我不希望”做一个重构别人代码的人”. 所以重构虽然痛苦,但是有些重构是必须进行的事情.特别是你预期到后面有大量的需求和变更的模块
当然值得反思的是,绝不做不分轻重的屠宰者,要”秉公办事”,轻急缓重要分得清,任何过度的事情都是失衡的状态,过度设计和过度重构,过度敏捷都是适得其反.
个人对重构的优先级:
1. 不稳定的地方,频繁出bug
2. 需求集中,变更频繁的地方
3. 核心模块内过时的代码
4. 核心模块内重复的代码
5. 核心模块内不清楚的代码
6. 一些无关痛痒的风格问题
办法总比问题多
重构与反思-<重构代码的7个阶段>有感的更多相关文章
- 【转】PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
原文地址: PHP 杂谈<重构-改善既有代码的设计>之一 重新组织你的函数 思维导图 点击下图,可以看大图. 介绍 我把我比较喜欢的和比较关注的地方写下来和大家分享.上次我写 ...
- 《重构--改善既有代码的设计》总结or读后感:重构是程序员的本能
此文写得有点晚,记得去年7月读完的这本书,只是那时没有写文章的意识,也无所谓总结了,现在稍微聊一下吧. 想起写这篇感想,还是前几天看了这么一篇文章 研究发现重构软件并不会改善代码质量 先从一个大家都有 ...
- 《重构——改善既有代码的设计》【PDF】下载
<重构--改善既有代码的设计>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196358 编辑推荐 重构,一言以蔽之,就是在不改变外 ...
- 【重构.改善既有代码的设计】14、总结&读后感
14.总结 首先,这是一本太老的书,很多观点已经被固化或者过时了.但核心观点没有问题,虽然大多数观点已经被认为是理所当然的事情了. 重构的定义 重构分几种: 1.狭义的代码重构 就是本书讲的, ...
- 【重构】AndroidStudio中代码重构菜单Refactor功能详解
代码重构几乎是每个程序员在软件开发中必须要不断去做的事情,以此来不断提高代码的质量.Android Stido(以下简称AS)以其强大的功能,成为当下Android开发工程师最受欢迎的开发工具,也是A ...
- 【Java重构系列】重构31式之封装集合
2009年,Sean Chambers在其博客中发表了31 Days of Refactoring: Useful refactoring techniques you have to know系列文 ...
- 重构前VS重构后效果对比
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42554641 学习重构已经一个多月了,虽然不能让代码特别的 ...
- 对数据访问层的重构(及重构中Perl的应用)
以前上学的时候,听到“一个学生在毕业后刚刚开始编程的头几年中,写出的代码多半是垃圾”这样的说法,均不屑一顾.现在工作一年多了,越发感觉自己代码中疏漏处甚多,故近来常做亡羊补牢的重构之举.拿自己4个月前 ...
- 『重构--改善既有代码的设计』读书笔记---Duplicate Observed Data
当MVC出现的时候,极大的推动了Model与View分离的潮流.然而对于一些已存在的老系统或者没有维护好的系统,你都会看到当前存在大把的巨大类----将Model,View,Controller都写在 ...
随机推荐
- SQL-W3School-函数:SQL GROUP BY 语句
ylbtech-SQL-W3School-函数:SQL GROUP BY 语句 1.返回顶部 1. 合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句. GROUP BY 语句 GROU ...
- 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_07-SpringSecurityOauth2研究-Oauth2授权码模式-资源服务授权测试
下面要完成 5.6两个步骤 3.3.4 资源服务授权 3.3.4.1 资源服务授权流程 资源服务拥有要访问的受保护资源,客户端携带令牌访问资源服务,如果令牌合法则可成功访问资源服务中的资 源,如下图 ...
- centOS 8 安装Hadoop
1.安装环境 本教程使用 CentOS 8 64位 作为系统环境,请自行安装系统. 本教程基于原生 Hadoop 2,在 Hadoop 2.8.5 版本下验证通过,可适合任何 Hadoop 2.x.y ...
- <configSections> 位置引起的错误
今天在配置一个项目的时候,花了挺长时间配置完成,然后一启动项目,懵了,启动报错:错误显示 Configuration Error Description: An error occurred duri ...
- Xena L23网络测试仪Valkyrie使用技巧100例:使用Xena官方在线演示设备 (编号00)
需求# 1.新用户:没有硬件,想看看软件长什么样,好不好用,风格如何,怎么办? 2.代理商:没有硬件,想给客户Show一下Xena高大上的软件,怎么办? 3.老用户:邮件推送了新的软件版本,据说很多新 ...
- Java中让fastJson识别Colloction和Map中的泛型类
由于fastJson的高效性,最近采用fastJson来做序列化并存储数据,但出现了一个麻烦的问题,如果将Map<K,V>这样的类型序列化,反序列化就会不尽人意,有以下尝试: 使用JSON ...
- AMD, CMD, CommonJS和UMD
我的Github(https://github.com/tonyzheng1990/tonyzheng1990.github.io/issues),欢迎star 今天由于项目中引入的echarts的文 ...
- input标签自动填充问题
<input type='text' placeholder='手机号' /> <input type='text' placeholder='地址' /> <input ...
- Postman 下载和使用
Postman 的官网下载地址是:https://www.getpostman.com/apps/
- 洛谷 题解 UVA1395 【苗条的生成树 Slim Span】
[题意] 给出一个\(n(n<=100)\)个节点的的图,求最大边减最小边尽量小的生成树. [算法] \(Kruskal\) [分析] 首先把边按边权从小到大进行排序.对于一个连续的边集区间\( ...