重构(一)-重构的意义与原则

——本文是参考Martin Fowler的《重构》一书做的总结。

(一)什么是重构?

对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

(二)为什么要重构?

2.1 重构改进软件设计

如果没有重构,程序的设计会逐渐腐败变质。
经常性的重构有助于帮助代码维持其原有的设计形态。

2.2 重构使软件更容易理解

“早期重构就像是擦掉窗户上的污垢,使你看得更远!”

代码的易读性,也是重构的目的之一。随着重构的进行,代码愈发易懂,就可以慢慢看到一些设计层面的东西,将对代码的理解提高到更高层次上。

2.3 重构帮助找到bug

“优秀的程序员是拥有优秀的开发习惯的!”

重构的过程中,随着对代码了解的深入,就更容易发现代码中潜藏的bug。

2.4 重构提高编程速度

良好的设计是快速开发的基础。

劣质的代码给维护工作带来太大的时间开销,以及给日后的开发埋下定时炸弹。定期重构能提高开发效率。

(三)何时重构?

重构不应是一件特别安排时间要做的事情!不应该为了重构而重构!
重构应该随时随地进行,当遇到需要重构的情况,就应当考虑重构。

3.1 三次法则

事不过三,三则重构。

当你再而三做一些繁琐的操作的时候,可以考虑重构。

3.2 添加功能时重构

添加新功能时,常常会为了急于实现功能而选择最容易实现的方式进行开发,如果通过某种设计,能够是这部分逻辑更加容易理解,并理解更深层次的东西,那么重构是应当考虑的一件事情。

3.3 修补错误时重构

出现错误的地方很可能是因为代码不够清晰,不能让人一眼就看出的bug。所以在bug出现的地方就该考虑可否通过重构使其更加容易维护。

3.4 复审代码时重构

定期复审代码是一个良好的编程习惯。可以更加理解整个框架的逻辑,包括自己或者他人所写的逻辑。
而在审查代码的同时,有可能就会发现重构的可能。

(四)重构的难题以及何时不该选择重构?

4.1 数据库

重构经常出问题的一个领域就是数据库。绝大多数程序都与其背后的数据库紧密关联,这也是数据库结构如此难以修改的原因之一。

4.2 接口

许多重构手法会修改到接口,若该接口已发布,所有用户都必须对这个变化做出反应,可以保留旧接口,让旧接口调用新接口,并标注旧接口已过时。

4.3 何时不该选择重构?

有时候既有代码太过混乱复杂,重构它不如推翻重写来的好。(重写的信号:代码中满是错误,根本无法稳定工作。)
项目临近最后期限,也应该避免重构,先要保证完成项目目标功能。

(五)重构与设计

重构与设计彼此互补。

基本不可能通过预先设计就建造一个可以应对各种变化的灵活的解决方案。用户的需求是不确定且可能还是不断变化的,软件需求会随着迭代的进行做各种调整。因此,仅仅通过预先做好设计,是很难满足移动开发和敏捷开发需求的了。
一些极限编程的支持者认为可以不做任何设计,只管按照最初想法开始编码,让代码有效运作,然后再将它重构成型,最终获得设计良好的软件。这种做法确实可行,但并不是最有效的途径。事先做好设计可以节省高昂的返工成本。

更有效的做法是依然做预先设计,但不必一定找出正确的解决方案,只需要先设计一个足够合理的解决方案就够了,在实现这个解决方案的时候,对问题的理解也会逐渐加深,可能会察觉最佳解决方案和当初设想的有所不同,再通过重构,使得预先设计方案逐渐演变为最佳的解决方案。

(六)重构与性能

如果做的任何修改都是为了提高性能,通常都会难以维护,影响开发效率。如果最终得到的软件更快了,那么这些损失尚有所值,可惜通常事与愿违,因为性能改善分散到程序各角落,每次改善不过是从程序行为的狭隘角度出发的。
前期开发应当编写良好的程序,不对性能投以特别的关注,直至性能优化阶段,再按照某个特定程序对性能进行优化。

重构使代码容易理解和修改,从而使得性能优化变得容易

程序耗时的部分往往集中在一小部分代码上,对性能做优化,就是主要对这一部分耗时代码的优化。短期来看,重构可能使软件变慢,但它使优化阶段的软件性能调整更容易,最终得到好的效果。
在性能优化阶段,首先应该用一个度量工具来监控程序的运行,找到程序中哪些地方在大量消耗时间和空间。这样就可以找出性能热点所在的一小段代码。然后集中关注这些性能热点,并使用持续关注法中的优化手段来优化它们。简言之就是:发现热点,去除热点。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 重构改善既有代码是指对一个已经存在的代码进行优化和改进,从而提高代码的可读性、可维护性和可扩展性。对于电子书的MOBI格式来说,重构改善有以下几个方面的作用。 首先,重构可以提高代码的可读性。通过重构,我们可以优化代码的结构,使其更加清晰易懂。对于MOBI格式来说,我们可以重新组织文件的结构,提取出公共的代码片段,增加注释和文档说明,使其更容易理解和维护。 其次,重构可以增强代码的可维护性。通过重构,我们可以降低代码的复杂度,减少代码的冗余和重复,使其更易于维护和修改。对于MOBI格式来说,我们可以使用面向对象的设计原则,提取出独立的功能模块,使其可以独立测试和维护。 再次,重构可以提高代码的可扩展性。通过重构,我们可以将代码的功能进行模块化和解耦,使其能够灵活扩展和增强功能。对于MOBI格式来说,我们可以设计可插拔的功能模块,使其能够方便地添加新的特性和支持新的格式。 最后,重构可以提高代码的性能和效率。通过重构,我们可以优化代码的算法和数据结构,减少不必要的计算和存储开销,提高代码的执行效率。对于MOBI格式来说,我们可以优化文件解析和渲染的算法,提高电子书的加载速度和用户体验。 综上所述,通过重构改善既有代码,对于电子书的MOBI格式来说,可以提高可读性、可维护性、可扩展性,同时也可以提高性能和效率。重构是一个长期持续的过程,需要不断地改进和优化,以保持代码的健康和可持续发展。 ### 回答2: 重构改善既有代码是指通过对已有代码的优化和修改,使其更加易于理解、扩展和维护。对于电子书的mobi格式文件,可以采取以下重构改善措施: 首先,对代码进行模块化重构。将功能相关的代码段封装为独立的模块或类,使其具备高内聚性和低耦合性。例如,可以将与电子书内容解析和渲染相关的代码放置于一个独立的模块中,与界面交互相关的代码放置于另一个模块中。这样可以使代码结构更加清晰,易于理解和维护。 其次,采用设计模式对代码进行重构。设计模式是一种被广泛应用于软件开发中的经验总结,可以提供可靠、灵活和可维护的解决方案。对于电子书mobi格式的代码,可以采用一些常见的设计模式,如工厂模式、单例模式、观察者模式等,来改善代码的设计和结构。 此外,注重代码的可读性和可维护性也是重要的重构目标。通过添加适当的注释、命名变量和函数等,使代码更加清晰易懂。同时,消除重复代码、提取公共代码,使代码更加简洁、可复用。 最后,进行性能优化是重构过程中的另一个关键点。通过分析和定位性能瓶颈,优化代码的执行效率,提高电子书mobi文件的加载速度和响应能力。可以采用一些优化技术,如缓存、异步加载等,来改善代码的性能。 总结起来,通过模块化重构、采用设计模式、提高可读性和可维护性、性能优化等措施,可以改善电子书mobi格式的既有代码。这样可以使代码更加健壮、可扩展和易于维护,提高电子书的用户体验。 ### 回答3: 重构是指对既有代码进行优化和改进,以提高代码质量、可维护性和可扩展性。 首先,对于电子书 mobi 文件的重构,可以从文件结构和命名方面着手。通过整理文件和目录结构,使其更加清晰和简洁,方便代码的阅读和维护。同时,对于变量、函数和类的命名,遵循一致且有意义的命名规则,以增加代码的可读性。 其次,可以通过减少代码冗余来改善代码。通过分析重复出现的代码块,并将其提取为可复用的函数或类,以减少代码量和维护成本。此外,还可以利用面向对象编程的特性,将功能相关的代码封装成类,以提高代码的灵活性和可重用性。 另外,重构还可以通过代码的重组和优化来改善代码的性能。首先,可以对算法和数据结构进行优化,以减少时间复杂度和空间复杂度。此外,通过减少不必要的计算和避免频繁的IO操作,可以进一步提高代码的执行效率。 此外,重构还需要考虑代码的可测试性。通过引入单元测试和集成测试,可以对重构后的代码进行验证,以确保代码的正确性和稳定性。同时,还可以通过使用自动化测试工具,提高测试的效率和覆盖率。 最后,还可以通过代码注释和文档编写来改善代码的可维护性。通过为代码添加清晰的注释,可以方便其他开发人员的理解和维护。同时,编写详细和准确的文档,可以帮助其他人员快速上手并了解代码的功能和使用方法。 综上所述,重构改善既有代码的电子书 mobi 文件可以通过优化文件结构和命名、减少代码冗余、提高性能、提升可测试性和编写文档等方式来实现。重构的最终目的是提高代码的质量和可维护性,使其更加易读易懂、高效稳定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Funnee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值