对《重构比从头开始更麻烦》的一些看法

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶高效! 阅读详情

原文引自:http://blog.joycode.com/microhelper/archive/2004/08/06/29865.aspx 作者:MicroHelper

第一, 度的把握。

项目开发的控制有四个要素:成本,时间,质量,范围。现在时间,质量已经决定,而且不由我们控制,那么为了控制成本,我们就只有对范围进行界定。

首先要制定出一个这段时间结束后要达到的目标。包括项目的性能,可扩展性,可以执行性,稳定性,友好性等等。一个清晰的目标能指引每个人向这个努力。而且这个目标对制定范围有着实际的指导意义。

另外一个是目前最迫切需要解决的问题,这是制定范围最优先考虑的。

还有一个是风险。(现在xxx驱动越来越流行,除了风险驱动之外,还有测试驱动,特征驱动,数据驱动,use case驱动等等)。怎么样制定一个范围,保证我们不会陷入泥潭,而又能段时间内拿出一个让别人耳目一新的 版本,使我们需要考虑的问题。

如何平稳过渡

小步快跑的方式是一个安全的办法,避免一次作太大的,无法预测的改动,分成几个小的阶段,步步为营。

接受变化

现在的系统虽然有问题,但是起码是比较稳定的,正常工作的,在work,right,best这条路上起码走到了right,要接受而且拥抱变化也是一个需要考虑的地方。

第二,技术的选择

对于架构,现在还没有一个统一的思想,选择是和上面范围的界定息息相关的,确定目标之后才能选择合适的架构。

焦点主要集中在

表示层和entity的绑定,entity的持久化,各层之间传递数据的方式,缓存对象之间的依赖关系,对象之间的协作,统一的安全控制的错误处理。配置信息的管理,unit test.

===========================================

如果不是看了文章的标题,我想我会很容易的接受,并将其放入收藏夹。我不相信像作者这样有经验的人会犯文不对题的问题,所以我又仔仔细细将文章看了一遍,似乎也看出一点东西,但对于重构,作者确实是用笔太少。

让我们按照作者的思路来考虑这个问题,由于成本、时间等多面因素,我们不可能对一切变化做出准备,尽管有很多办法可以帮助我们刺激变化,及时发现潜在的变化,但难免的,在项目后期,我们还是会面临需求变更的危机,如果这个变化是我们所未预料的,并且牵一发动全身,那么,这种情况下,我们是否需要重构?

先让我们看看《重构》的作者是怎么定义重构的:“在不改变代码外在行为的前提下对代码做出修改,以改进代码的内部结构的过程。”请注意,重构是在不改变外在行为的优化。这就像人身上脏了要洗澡一样,是频繁、小度量的工作步骤。如果在前几次的迭代中还不能激发变化,我们就需要考虑度的把握,不要奢望在项目后期进行系统级的重构,它的代价太大了。如果你的改动将影响整个系统,那你只能想别的办法补救,所以,放弃重构吧,至少在当前这个可运行的版本中。

就像作者说的work,right,best一样,重构的前提是代码可以正常工作,目的是让代码更好的工作的。所以更多时候,我会把设计看作系统级的,把重构看作代码级,它们是两个阶段的两种工作,不能混为一团。

重构不是万能的,不要依赖于重构,也不要夸大了重构的功用,在很多时候,它并不能改善你设计上的缺陷。

===========================

以上看法是我自已对重构不成熟的看法,并不代表原作者的观点,可能曲解了原作者的用意。不当之处,望各位高手指正。

如何重构一个系统 如何重构一个系统 发现一个很有意思的情况,做系统写代码多年了,遇到的需求基本上是在已有的系统上实现,从头来实现的系统基本上没有。 1 why 无论是从头是实现一个系统,还是维护一个系统,当时实现的技术可能是最先进的、规划的产品逻辑是合理的,随着时间的发展、开发人员的变、系统的代码质量会逐渐腐化,加个Feature太麻烦,改个Bug涉及模块太多-没有单测不敢随便解,业务方抱怨技术团队响应太慢 阅读详情

相关推荐

Duilib的使用(优化MFC界面)之 配置项目属性

一、生成库文件 打开解决方案管理器设置DuiLib为启动项 点击批生成,生成示例内容 按照标记顺序点击,批生成Duilib的exe示例程序 将生成的bin和lib拷贝出来以便于后来的配置项目的项目属性,我将其放在F:\Duilib下 dll内的文件 lib中的文件 二、配置项目属性 配置所有平台包含目录填入Duilib的路径F:\Duilib\DuiLib,...

大头的博客 1246

浅谈测试驱动开发(TDD)

浅谈测试驱动开发(TDD)内容:背景1. 优势2. 原理3. 过程4. 原则5. 测试技术6. Tips参考资料 关于作者

mounTon... 2433

谈谈代码重构

关于代码重构的理解:在不改变软件系统/模块所具备的功能特性的前提下,遵循/利用某种规则,使其内部结构趋于完善。其在软件生命周期中的价值体现主要在于可维护性和可扩展性。

一个码农的前三十年 1万+

重构看法 - 评 “重构从头开始麻烦

看到一片文章:重构从头开始麻烦我想首先,对于一个程序员来说,重构自己的代码是自己的责任,理应不断精益求精。但是重构过程注意自己代码的版本管理。重构理应是一个好的程序员的良好品质之一。重构有可能成功(代码比原来的好),也可能失败。所以重构非常强调测试。如果失败了,那么恢复旧代码,不应该将责任放在重构上。可能应该反思:1。原来的代码真的有必要重构吗?2。重构的方法是否

阿亮的专栏 1220

在C++中的进行重构

在C++中的进行重构   最近在修改一个项目,C++的一个服务器端的程序。它用来连接两种终端一种是发起终端一种是被控终端。以前只支持一个发起终端,现在需要将其改成能够支持多个发起终端的情况,当看了程序之后,首先就打算先整理一下以有的代码。或者也能说得上是一种重构吧。先说说这个程序:主要有以下的三个类CSrvCSrvDlgCSockCStartSock CEndSock 是CSock的两个继承类,也

3731

三维图像处理_CT/MRI等二维图像处理及三维重构的一些看法

时隔数年,又回到知乎,对这个知识分享平台(说不上是知识吧,经验?个人理解?,毕竟还算比某引擎搜索的全是广告来的靠谱)感觉还算挺亲切的。三维重构或者说三维可视化目前刚好涉及到这一块,浅浅的说下吧(流水账,内容所含的某某单位某某朋友,只是讲讲故事,大家乐呵一下,并无他意)1、设备这就多了,医学CT、MRI、工业CT、FIB等等;微米级、纳米级等等;价格百万级到千万级;医学CT一般是毫米级吧:曾有个朋友...

weixin_39533659的博客 1190

设计模式学习笔记 - 规范与重构 - 1.什么情况下要重构重构什么?又该如何重构

介绍重构的概念重构的目的,为什么重构(why);重构的对象,到底重构什么(what);重构的时机,什么时候重构(when);重构的方法,又该如何重构(how)。。

chenjian723122704的专栏 1179

重构》读书笔记

前言   近期在看《重构:改善既有代码的设计》这本书,目前读了几个章节的内容,里面的内容与案例还是比较贴合实际且阅读度不算大的一本重构书籍。好记性不如烂笔头,为了与大家分享和加深印象特记录本篇文章,文章会跟随我阅读的进度进行持续和补充,如有不足之处请在下方评论指点,本人会及时正以免影响其他同学阅读。 简介    《重构:改善既有代码的设计》这本书在各大论坛上被指出是Java程序员必读的三本书之一。(另外两本是《Java编程思想》和《Effective Java》)。其实这本书给我的感觉,不一定局限于

weixin_44653248的博客 7893

漫画:领导让我重构代码,怎么办?

作者 |akiyama 责编 | 伍杏玲 什么时候进行重构? 任何时间都可以进行重构,前提是你有足够的时间以及精力去做这件事情,大部分公司重构代码是不会计入KPI的,甚至重构的越多,出Bug的概率就越大,背锅的可能就越大。因此,小规模的重构或者自己负责功能的重构,可以穿插在需求中进行;大规模重构因为耗费时间较长,出错概率较高,必须要得到上级的支持...

程序人生的博客 5583

重构2 笔记

重构2 笔记

chaoji_xiaobai的博客 571

重构》第二章、重构的原则---重点提取

为何重构: 经常性的重构,有助于维持代码架构该有的形态 如果没有重构,程序的内部设计(或者说架构)就会逐渐腐败变质。当只为短期目标而去修改代码时,经常没有完全理解代码的整体设计,于是代码会失去原有的结构。程序员将会越来越以通过阅读源码理解原来的设计。代码结构的流失就会有累积效应。 重构使软件容易理解 计算机多化时间周期来编译,并不重要,重要的是自己写的代码能不能被后面的程序员所读懂,如果一个改动需要一周的时间去修改,如果读懂原来的代码,可能只需要一个小时就...

寒风的博客 517

系统重构的10点经验总结

导读:我们日常工作中,系统重构应该是最让人头疼的了,无论是错综复杂还是简单的系统,在发展的过程中都会经历重构,系统重构也是任何技术团队无法回避的问题,在我服务的多家公司,...

weixin_45583158的博客 2034

为什么要重构(why)?

虽然对于你来说,重构这个词可能不需要过多解释,但我们还是简单来看一下,大师是怎么描述它的。软件设计大师 Martin Fowler 是这样定义重构的:“重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其易理解,修改成本低。” 实际上,当讲到重构的时候,很多书籍都会引用这个定义。这个定义中有一个值得强调的点:“重构不改变外部的可见行为”。我们可以把重构理解为,在保持功能不变的前提下,利用设计思想、原则、模式、编程规范等理论来优化代码,修改设计上的不足,提高代码质量。 简单了解重构

鸭梨的博客 2124

12.项目重构演进之路

文章摘要 本文探讨了项目重构的演进之路,从整体概述到具体实践,详细阐述了重构的背景、要求、目的及设计目标。重构旨在提高代码质量,包括可读性、可扩展性和可维护性,同时避免过度设计。文章指出,重构应分为大型重构和小型重构,前者涉及系统、模块等顶层设计,后者则针对代码细节。重构时需制定计划,分阶段进行,并借助单元测试确保代码逻辑正确。此外,文章还介绍了重构的技术手段,如编写测试用例、mock业务数据、发现代码bug和优化编码方式,以及如何避免重构失败和进行架构设计思考。通过这些实践,项目可以逐步优化,提高整体质量

杨充 1120

系统重构旧系统切换方案概述

什么是系统重构 它是一套严谨而安全的过程方法,它通过一系列行之有效的方法与措施,保证软件在优化的同时,不会引入的BUG,保证软件改造的质量。 系统重构,就是在不改变软件的外部行为的基础上,改变软件内部的结构,使其加易于阅读、易于维护和易于变。 系统重构,在我理解有一种是系统内部的重构,也就是既有代码,还有一种是推翻老系统,建立一套系统。 系统重构原则和方法 1、建议采用“迭代式”重构。 考虑将一次重构拆分为多次“迭代”行为,然后每一个重构步骤能快速部署上线并得到反馈,以便评估重构的效果,及时作出调整

Layne的专栏 6778

重构学习】03 重构测试

的一年了,我却在这里写这个鬼 《重构》的这一章主要是讲java的一个测试框架,我直接就跳着看了 只是简单的看了一下它的思想 重构需要一个良好的测试体系,而我们需要为重构构建一个这样的体系,这是重构的前提 不需要期待完美测试,需要的是不完美的测试已经在实际执行了 测试的时候考虑可能出错的边界条件,并集中火力 不要因为测试无法捕捉所有BUG就不写测试,至少它可以捕捉大多数 ...

ZQ13771472517的博客 227

重构的原则(下)

洪流学堂,让你快人几步。 本篇内容来自洪流读书会精选内容。 上次我们从区分重构与性能优化重构时我们的角色定位两个方面对重构的原则进行了解读,今天我将从重构带给我们什么、何时重构两个方面来为大家进一步解读重构的原则。 重构的原则 重构带给我们什么 重构能带给我们什么? 重构可以改进软件的设计,使软件容易理解,帮助找到bug,提高编程速度。 **如果没有重构,程序的架构会逐渐腐败变质。**当人们只为短期目的而修改代码时,他们经常没有完全理解架构的整体设计,于是代码逐渐失去了自己的结构。程序员越来越通过.

大智_Unity探路者 270

代码重构麻烦?试试coze-loop的AI智能优化

本文介绍了如何在星图GPU平台上自动化部署🔄 coze-loop - AI 代码循环优化器镜像,实现AI驱动的代码智能重构优化。该工具能基于本地大模型,快速分析并优化代码性能、可读性及潜在Bug,显著提升开发者的编程效率与代码质量。

weixin_28895791的博客 262

系统重构思路

现在是进行重构的恰当时机吗?重构前需要做什么准备?如何保障重构工作顺利完成并达成预期目标?从这几个大家都关心的问题,来谈谈重构工作遵循的基本思路和原则。

软软的铲屎官的博客 1021
上一篇: 漂亮MM的盛会--飞利浦显亮宝贝CS郑州赛区决赛
下一篇: OO三步曲
devercn
博客等级 码龄22年 16粉丝 45原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值