别动不动拿重构说事

2024-01-17 11:18
文章标签 重构 动不动 说事

本文主要是介绍别动不动拿重构说事,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2007年05月23日 00:51:00

自从Martin Fowler先生将Refactoring这个概念带到了中国,许多程序员都如同获得了一个通行金牌似的,随时可能提起"Bad Smell"和"重构"。

从我的心里来讲,我并不反对重构。但我反对不考虑项目情况的盲目重构。

回想一下,当我们在考虑系统需要重构的时候,我们都考虑了那些因素?特别是大范围的系统级别的重构。由于小型重构涉及面较小,所以下面的很多原因都是针对大型重构进行论述的。

"Bad Smell"也许是我们第一个说出的原因。讲起这个,我仿佛就听到有无限个非常有道理的理由,能从重构者嘴里说出。其中最经常的理由就是:现在不重构,以后也得重构,显然现在重构的代价更小一点。

那么,我们就因此而准备进行重构了吗?

至少我看到很多项目最终都选择了重构。

选择重构的心理,应该和我们程序员的追求完美的个性非常相关。软件不断的进行重构,那么软件的质量就能越好。最关键的是,我们越来越将代码修改得让自己感觉没有遗憾。请允许我这样来分析重构者的心理,但是你不得不承认,往往决定一件事的时候,潜意识很容易战胜理智。

我的问题是,我们重构的时候,真正理性而全面的考虑过吗?

第一、重构的目标是什么?是系统的完美吗?是项目的顺利完成!我想提出一个大家不一定能够接受的标准,任何系统都是可以也是必然存在足够多的缺陷的。真正的成功,是指项目的成功,而并不是指创造一个完美的系统。重构的需要,是项目开发过程中,根据需要而采用的开发方式。只要保障足够程度的软件架构,重构是可以不进行的。

第二、重构的基础具备了吗?在很多成功的经验中,都明确地指出,重构需要有足够的单元测试支持。而且最好是自动化的。目前,很多项目并不具备这样的基础。对于单元测试的问题,我在最近的几篇关于单元测试的博文中也分析过现状和原因。总体说来,真正具备重构的基础的很少。

第三、重构对成本是否考虑周到。我们知道,重构必然会影响到现有项目的进度。这个进度的影响是否是可以接受的?你先不要忙着回答这个问题。能不能接受不是重构者说的,而是市场说的。这个时候,一个三方的沟通会议必不可少。

第四、重构的策略是否制定。重构这件事,并不是简简单单地就去将所有需要重构的地方进行重构。重构的范围越大,这个策略的需求就越高。过分乐观地估计重构的过程,往往是重构失败的重要原因之一。在对项目进行系统级别重构的时候,针对重构的范围规划,进度控制是非常必要的。这个不能要求重构者完全把控。本着适合的人做适合的事的原则,项目经理,应该充分考虑这方面的问题。

其实说到底,不要因为喜欢重构而重构,不要因为重构而重构。在重构之前以及重构的过程之中,我们都必须进行足够的保障,才能保障成功地完成。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1621690


这篇关于别动不动拿重构说事的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/615844

相关文章

Mybatis Plus快速重构真批量sql入库操作

Mybatis快速重构真批量sql入库操作 基本思路 重构mybatis默认方法saveBatch和saveOrUpdateBatch的实现 基本步骤 真批量保存实现类InsertBatchMethod真批量更新实现类MysqlInsertOrUpdateBath注册InsertBatchMethod和MysqlInsertOrUpdateBath到EasySqlInjector注册Eas

[机缘参悟-222] - 系统的重构源于被动的痛苦、源于主动的精进、源于进化与演进(软件系统、思维方式、亲密关系、企业系统、商业价值链、中国社会、全球)

目录 前言:系统的重构源于被动的痛苦、源于主动的精进、源于进化与演进 一、软件系统的重构 1、重构的定义与目的 2、重构的时机与方法 3、重构的注意事项 4、重构的案例分析 二、大脑思维的重构 1、大脑思维重构的定义 2、大脑思维重构的方法 3、大脑思维重构的挑战与前景 三、认知的重构 1、定义 2、目的 3、方法 四、实例 五、总结 四、婚姻家庭的重构 1、婚

总结如何成为“好”代码——读《重构:改善既有代码的设计》有感

读后感 说是“读后感”,其实并不是看得很仔细,尤其是各种代码例子,我基本上是跳过的。个人觉得,重构这件事上,关键是要能嗅出坏代码,知道什么是好代码,这样目标明确后,重构的手段其实是水到渠成的,唯一要注意的就是书中强调的:要以小步为单位稳打稳扎进行。 我所理解的“好”代码 核心目标 那么如何才是“好”代码?书中的答案是:“人们是否能轻而易举地修改”,而我觉得抽象层级更高的描述是:易于未来的工

数据结构 - 二叉树(重构 + 遍历)

写在前面 昨天有同学问到我一题关于重构二叉树的问题(link),做了一下,也做个记录吧! 所谓二叉树的重构,就是给你前序和中序,或者中序和后序,让你还原这棵二叉树. 注意:给出前序和后序是不能唯一确定一棵二叉树的,证明请看这儿.   一.给出前序和中序,重构二叉树 一个递归的过程: 当前结点的value:每一轮根据前序的第一个元素确定当前结点值. 左子树的中序遍历

软考证书补贴动不动就好几万,真的能领到吗?

取得软考证书在许多地区都有补贴政策,从几千至二十几万元不等。有些考生会好奇这些补贴是真的能领到吗,为此,小希搜集了一些例子证明是可以领到的,供大家参考。 1、奖励名单里的软考证书         在一些地区公示的奖励名单里,奖励人员的职称类别是软考资格名称,职称取得时间是软考考试时间,证明确实是通过软考考试取得职称后申请的补贴。 ✅湖南省常德市         2024年6

来自Uber的12条架构重构经验

来自Uber的12条架构重构经验 2016-02-04  来源:聊聊架构 分类:架构  阅读(56) 评论(0)  对于开发者来说,架构设计是软件研发过程中最重要的一环,所谓没有图纸,就建不了房子。在遍地App的互联网时代,架构设计有了一些比较成熟的模式,开发者和架构师也可以经常借鉴。 但是,随着应用的不断发展,最初的架构往往面临着各种问题,比如无法满足客户的需求、无法实现应用的扩

重构手法之重新组织函数

重构手法之重新组织函数 在重构的手法中,很大的一部分是对函数进行整理,使函数能够恰当地包装代码(让代码自己说话而不是写更多的注释)。重新组织函数的驱动力,往往都是由于函数过长。因为函数过长就以为着包含了更多属性和逻辑,这样复杂的逻辑和诸多属性(如函数内部的局部变量或者静态变量等)会让代码变得难以维护,需要对其进行重新组织。 提炼函数 在冗长的函数中提炼出精小的函数,让每个短小函数负责的

LeetCode 重构二叉搜索数,即找出两个被交换的节点

原题:Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing its structure. Note: A solution using O(n) space is pretty straight forward. Could you de

QNN:基于QNN+example重构之后的yolov8det部署

QNN是高通发布的神经网络推理引擎,是SNPE的升级版,其主要功能是: 完成从Pytorch/TensorFlow/Keras/Onnx等神经网络框架到高通计算平台的模型转换; 完成模型的低比特量化(int8),使其能够运行在高通神经网络芯片上; 提供测试工具(qnn-net-run),可以运行网络并保存输出; 提供测试工具(qnn-profile-viewer),可以进行FLOPS、参数量、每