我们需要重构吗

当我开始写这篇文章的时候 ,我的思想还处于斗争阶段,多年来我也在程序开发的第一线,经历了很多项目,也编写了很多代码,但是从心里说我几乎没有用到重构这一方法,但最近看一本书名字叫《重构 改善既有代码的设计》 ,它让我感觉我这些年的迷惑终于找到了明灯。

  我以前认为代码只要实现了就OK了,不用再去动他了,不管当时实现时绕了多少个圈,用了多少冗余代码。有时候想想也是既然已经实现了,干嘛还要化那么多精力去装饰那些代码,而且保证系统功能正常运行和项目按时完成是第一要务,剩下的一切都变得不在重要了。当我开始读完这本书的时候,我发现我错了,大错特错,重构并不是作为装饰代码的步骤而存在的而是为了能够更好的维护代码,减少出错,增加代码执行的正确率。试想一下如果在一段代码里面各种局部变量来回的交叉,各种if,switch,for 来回的出现,你还愿意去维护它,我想我更愿意去重写这段代码,而不是去维护它,我经常跟同事开玩笑说“当我代码写完以后,不要问我怎么实现的,我也不知道”,其实这不是在开玩笑,是真的,很多时候我写完一段代码,我真不知道他是怎么实现的。当然我也不是一直在给别人挖坑,有时候也会给别人填坑,当打开源代码的时候,我常常会说一句“这个代码太烂了,我重写如何”。哈哈我们程序员,果然是互相伤害的群体啊。我经常在幻想自己写的程序能够活5年,10年,虽然我没有统计过,但是从这本书中我看到的是我写的东西估计一个礼拜都活不下来,都是一次性的产品,维护性奇  

  我以前还以为我采用某套开发框架("MVC","SSH","MVVM")就不用操心维护问题,毕竟这些都是些开发模板嘛,只要对这些框架熟悉的人都能很好的维护代码,能够开发出可读性好的代码。结果我还是错了,开发框架提供的只是模板,里面的内容还是我自己填充的,就像一件华丽的套装里面装着的确是一堆发黑发臭的屎一样。重构给我的就是一个让代码编得更加规则的可以维护的,能够更大的发挥模板价值的武器。它让系统更加的标准,更加清新。

我以前总是鄙视那些把代码放得导出都是的人,觉得他们就是为了显示自己高明老是把代码,分割成好多块,执行代码的时候要创建好多实体,多么浪费的行为啊。确实要是把所有的相关逻辑写在一个方法里面,执行效率看似很高, 当系统真正运行的时候,你会发现,其实有时系统不在乎那点时间,如果代码不可维护,出问题了,系统整体的寿命就大打折扣了。

说了那么多,回到起点,其实重构虽然不是必须的步骤,但确是一个可以为自己和自己的成果加分的部分。谁都喜欢尽善尽美不是吗?

时间: 2024-08-26 23:09:33

我们需要重构吗的相关文章

关于重构工作的一点思考

最近两周一直忙着和重构相关的事情,本文将简要概述从开始制定重构方案,到具体执行的过程中遇到的问题,以及对重构的一点理性思考. 起因: 本系统是2015年11月开始建设,当时为了快速投入使用,大量的烂代码,后期一直保持快速前进,没有进行过实质性的重构. 具体表现: ● 分层不清,sql哪都有,dao有.service也有,就差controller没写了.同样dao也包含业务逻辑. ● sql用的是spring jdbc,并没有使用mybatis,导致sql写起来有些复杂,封装不够基本都是原始sql

重构二叉树

重构二叉树 这是剑指offer中关于二叉树重构的一道题.题目原型为: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 一.二叉树的数据结构 做题之前,我们先熟悉下二叉树的数据结构.其一,定义:二叉树是一个连通的无环图,并且每一个顶点的度不大于3.有根二叉树还要满足根结点的度不大于2.有了根结点之后,每个顶点定

跟王老师学接口:(五)实例:对电子宠物系统进行重构

对电子宠物系统进行重构 主讲教师:王少华   QQ群号:483773664 一.重构需求 定义Eatable接口,在接口中定义eat()方法,表示吃饭功能 定义FlyingDiscCatchable接口,在接口中定义catchingFlyDisc()方法,表示接飞盘功能 定义Swimmable接口,在接口中定义swim()方法,表示游戏功能 定义抽象类Pet,包括宠物名称(name).健康值(health)和与主人亲密度(love)属性,并提供抽象方法print(),用来输出宠物信息 定义狗类(

重构第10天:提取方法(Extract Method)

理解:经常写的代码中,有一些计算逻辑比较复杂的方法,写下来一个很长很长的方法,我们可以把这个方法,根据功能,分解成单独的几个小方法.这样做不仅能够增加代码的可维护性,而且增加了易读性. 详解: 重构前代码: 1 public class Receipt 2 { 3 private IList<decimal> Discounts { get; set; } 4 private IList<decimal> ItemTotals { get; set; } 5 6 public de

重构第9天:提取接口(Extract Interface)

理解:提取接口的意思是,多于一个类共同使用某个类中的方法或属性,那么我们可以把这些方法和属性提出来,作为一个单独的接口.这样的好处是解除代码间的依赖,降低耦合性. 详解: 先看重构前的代码: 1 public class ClassRegistration 2 { 3 public void Create() 4 { 5 // create registration code 6 } 7 8 public void Transfer() 9 { 10 // class transfer code

重构第6天:降低字段(Push Down Field)

理解:和提升字段正好相反,跟降低方法类似,就是把基类中,只有部分继承类需要用到的字段,降低到继承类自身去. 详解: 重构前代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace _31DaysRefactor 7 { 8 public abstract class Task 9 { 10 protected string _res

重构中对设计模式的反思

什么是设计模式? 每一类编程语言都具有其自身的特性,就像是面向对象的语言,其特性就是封装,继承,多态,抽象. 同一时候,使用每一类编程语言开发软件时也都有一些设计准则,这些准则保证了软件的质量,即具有良好的设计. 而设计模式则是广大软件开发者总结出的开发经验技巧,它们利用编程语言的特点,实现这些准则.因此,能够想象,当我们对设计模式熟悉到一定程度后,在设计系统时.我们眼里就会变得没有设计模式,仅仅有设计准则,真正达到手中无剑.心中有剑的境地. 在学习设计模式时.到底要学什么?      曾经.在

[机房重构]UML图(包图、类图、用例图、时序图)

机房重构画图是一个非常重要的一个阶段,机房重构之前也画过UML的图,但是这一次与上一次不同,这一次有分层的思想在里面. 包图 之前三层的时候各层之间的传递很清晰,包图也很容易就画出来了,先来看之前三层的包图.通过实体将输入的信息从U层传入B层,同时通过实体将信息从D层传入B层,B层进行判断,通过实体将结果返回给U层. 之前的三层不能很好的实现低耦和的思想,并且我们学习了设计模式,要继续进行分层,进行七层的编写.之前不太理解,看大家的博客,知道在U层和B层之间加入了外观模式,降低U层和B层之间的耦

重构的WechatLog

重构前 class WechatLog < ActiveRecord::Base has_many :wechats belongs_to :wechat_platform has_many :img_text_messages def self.add_wechat_text_message(options = {}) keyword = WechatPlatformKeyword.find_by(name: options[:content]) trigger_type = keyword.