重构:改善既有代码的设计

JY02无刷电机驱动芯片的硬件设计与调试实战 本文详细介绍了JY02无刷电机驱动芯片的硬件设计与调试实战。重点解析了其外置MOSFET的设计优势,提供了从电源滤波、功率MOSFET选型到电流采样保护的核心电路设计指南。文章还分享了安全上电、动态测试及常见问题排查的完整调试流程,并探讨了开关优化、闭环测速等性能提升技巧,帮助开发者构建稳定高效的无刷电机驱动系统。 阅读详情
第1章 重构,第一个案例 1
1.1 起点 1
1.2 重构的第一步 7
1.3 分解并重组statement() 8
1.4 运用多态取代与价格相关的条件逻辑 34
1.5 结语 52
第2章 重构原则 53
2.1 何谓重构 53
2.2 为何重构 55
2.3 何时重构 57
2.4 怎么对经理说 60
2.5 重构的难题 62
2.6 重构与设计 66
2.7 重构与性能 69
2.8 重构起源何处 71
第3章 代码的坏味道 75
3.1 Duplicated Code(重复代码) 76
3.2 Long Method(过长函数) 76
3.3 Large Class(过大的类) 78
3.4 Long Parameter List(过长参数列) 78
3.5 Divergent Change(发散式变化) 79
3.6 Shotgun Surgery(霰弹式修改) 80
3.7 Feature Envy(依恋情结) 80
3.8 Data Clumps(数据泥团) 81
3.9 Primitive Obsession(基本类型偏执) 81
3.10 Switch Statements(switch惊悚现身) 82
3.11 Parallel InheritanceHierarchies(平行继承体系) 83
3.12 Lazy Class(冗赘类) 83
3.13 Speculative Generality(夸夸其谈未来性) 83
3.14 Temporary Field(令人迷惑的暂时字段) 84
3.15 Message Chains(过度耦合的消息链) 84
3.16 Middle Man(中间人) 85
3.17 Inappropriate Intimacy(狎昵关系) 85
3.18 Alternative Classes with Different Interfaces(异曲同工的类) 85
3.19 Incomplete Library Class(不完美的库类) 86
3.20 Data Class(纯稚的数据类) 86
3.21 Refused Bequest(被拒绝的遗赠) 87
3.22 Comments(过多的注释) 87
第4章 构筑测试体系 89
4.1 自测试代码的价值 89
4.2 JUnit测试框架 91
4.3 添加更多测试 97
第5章 重构列表 103
5.1 重构的记录格式 103
5.2 寻找引用点 105
5.3 这些重构手法有多成熟 106
第6章 重新组织函数 109
6.1 Extract Method(提炼函数) 110
6.2 Inline Method(内联函数) 117
6.3 Inline Temp(内联临时变量) 119
6.4 Replace Temp with Query(以查询取代临时变量) 120
6.5 Introduce Explaining Variable(引入解释性变量) 124
6.6 Split Temporary Variable(分解临时变量) 128
6.7 Remove Assignments to Parameters(移除对参数的赋值) 131
6.8 Replace Method with Method Object(以函数对象取代函数) 135
6.9 Substitute Algorithm(替换算法) 139
第7章 在对象之间搬移特性 141
7.1 Move Method(搬移函数) 142
7.2 Move Field(搬移字段) 146
7.3 Extract Class(提炼类) 149
7.4 Inline Class(将类内联化) 154
7.5 Hide Delegate(隐藏”委托关系”) 157
7.6 Remove Middle Man(移除中间人) 160
7.7 Introduce Foreign Method(引入外加函数) 162
7.8 Introduce Local Extension(引入本地扩展) 164
第8章 重新组织数据 169
8.1 Self Encapsulate Field(自封装字段) 171
8.2 Replace Data Value with Object(以对象取代数据值) 175
8.3 Change Value to Reference(将值对象改为引用对象) 179
8.4 Change Reference to Value(将引用对象改为值对象) 183
8.5 Replace Array with Object(以对象取代数组) 186
8.6 Duplicate Observed Data(复制”被监视数据”) 189
8.7 Change Unidirectional Association to Bidirectional(将单向关联改为双向关联) 197
8.8 Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) 200
8.9 Replace Magic Number with Symbolic Constant(以字面常量取代魔法数) 204
8.10 Encapsulate Field(封装字段) 206
8.11 Encapsulate Collection(封装集合) 208
8.12 Replace Record with Data Class(以数据类取代记录) 217
8.13 Replace Type Code with Class(以类取代类型码) 218
8.14 Replace Type Code with Subclasses(以子类取代类型码) 223
8.15 Replace Type Code with State/Strategy(以State/Strategy取代类型码) 227
8.16 Replace Subclass with Fields(以字段取代子类) 232
第9章 简化条件表达式 237
9.1 Decompose Conditional(分解条件表达式) 238
9.2 Consolidate Conditional Expression(合并条件表达式) 240
9.3 Consolidate Duplicate Conditional Fragments(合并重复的条件片段) 243
9.4 Remove Control Flag(移除控制标记) 245
9.5 Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式) 250
9.6 Replace Conditional with Polymorphism(以多态取代条件表达式) 255
9.7 Introduce Null Object(引入Null对象) 260
9.8 Introduce Assertion(引入断言) 267
第10章 简化函数调用 271
10.1 Rename Method(函数改名) 273
10.2 Add Parameter(添加参数) 275
10.3 Remove Parameter(移除参数) 277
10.4 Separate Query from Modifier(将查询函数和修改函数分离) 279
10.5 Parameterize Method(令函数携带参数) 283
10.6 Replace Parameter with Explicit Methods(以明确函数取代参数) 285
10.7 Preserve Whole Object(保持对象完整) 288
10.8 Replace Parameter with Methods(以函数取代参数) 292
10.9 Introduce Parameter Object(引入参数对象) 295
10.10 Remove Setting Method(移除设值函数) 300
10.11 Hide Method(隐藏函数) 303
10.12 Replace Constructor with Factory Method(以工厂函数取代构造函数) 304
10.13 Encapsulate Downcast(封装向下转型) 308
10.14 Replace Error Code with Exception(以异常取代错误码) 310
10.15 Replace Exception with Test(以测试取代异常) 315
第11章 处理概括关系 319
11.1 Pull Up Field(字段上移) 320
11.2 Pull Up Method(函数上移) 322
11.3 Pull Up Constructor Body(构造函数本体上移) 325
11.4 Push Down Method(函数下移) 328
11.5 Push Down Field(字段下移) 329
11.6 Extract Subclass(提炼子类) 330
11.7 Extract Superclass(提炼超类) 336
11.8 Extract Interface(提炼接口) 341
11.9 Collapse Hierarchy(折叠继承体系) 344
11.10 Form Tem Plate Method(塑造模板函数) 345
11.11 Replace Inheritance with Delegation(以委托取代继承) 352
11.12 Replace Delegation with Inheritance(以继承取代委托) 355
第12章 大型重构 359
12.1 Tease Apart Inheritance(梳理并分解继承体系) 362
12.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计) 368
12.3 Separate Domain from Presentation(将领域和表述/显示分离) 370
12.4 Extract Hierarchy(提炼继承体系) 375
第13章 重构,复用与现实 379
13.1 现实的检验 380
13.2 为什么开发者不愿意重构他们的程序 381
13.3 再论现实的检验 394
13.4 重构的资源和参考资料 394
13.5 从重构联想到软件复用和技术传播 395
13.6 小结 397
13.7 参考文献 397
第14章 重构工具 401
14.1 使用工具进行重构 401
14.2 重构工具的技术标准 403
14.3 重构工具的实用标准 405
14.4 小结 407
第15章 总结 409
参考书目 413
要点列表 417
索引 419
手把手教你玩转RISC-V指令集​​​专栏--​​1.2 对比x86/ARM:RISC-V的三大核心优势(开放、灵活、可扩展)​ ​:RISC-V以“开放打破垄断、灵活适配场景、扩展定义未来”的三大优势,正在重塑计算架构格局。其核心价值不仅是技术革新,更是对全球半导体产业链话语权的重新分配。 阅读详情

相关推荐

手把手教你用OpenCalib完成激光雷达与相机联合标定:从数据准备到结果可视化

本文详细介绍了使用OpenCalib工具链中的lidar2camera模块完成激光雷达与相机联合标定的全流程,包括数据准备、标定命令执行、结果验证与可视化。通过实战指南,帮助读者掌握工业级标定技术,提升自动驾驶和机器人领域的传感器融合精度。

weixin_30872499的博客 400

《重构》读书笔记(十三)——第十三章 重构,复用与现实

13.1 现实的检验  13.2 为什么开发者不愿意重构它们的程序? 1. 不知道如何重构。 2. 如果这些利益是长远的,何必现在付出这些努力呢?长远看来,说不定当项目收获这些利益时,你已经不在职位上了。 3. 代码重构是一项额外工作,老板付钱给你,主要是让你编写新功能。 4. 重构可能破坏现有程序。 1. 如何重构?在哪里重构? 1).  一个常见的重构原因,就是调整程序结构以使(

e5Max的专栏 1180

避坑指南:ZYNQ平台上AXI 1G/2.5G Ethernet Subsystem实现IEEE1588的5个关键点

本文详细解析了在ZYNQ平台上使用AXI 1G/2.5G以太网子系统实现IEEE1588精密时间协议(PTP)的5个关键避坑点。从硬件选型、Vivado工程配置到Linux驱动适配,提供了实战经验与优化技巧,帮助工程师在工业自动化、电力系统等场景中实现纳秒级时间同步。

weixin_30687051的博客 236

重构-改善既有代码的设计(十三):重构、复用与现实

1、现实的检验 (1)重构的潜在因素:在编写代码时对自己所做的事情没有完整的了解,并且受到生产进度的压力 (2)重构被用于开发框架、抽取可复用组件、使软件架构更清晰、使新功能的增加更容易 (3)重构可以帮助你充分利用以前的投资,减少重复劳动,使程序更简洁有力 (4)重构时,你必须找出待重构的这一部分程序被什么地方引用 2、为什么开发者不愿意重构它们的程序 (1)不知道如何重构 (2)...

东晨雨的博客 374

图像加密与解密(附matlab代码)

详细介绍了三种图像加密解密原理,并基于matlab开发了一套相应系统。

2441

基于深度学习的商品标签识别系统:UI界面 + YOLOv8/v7/v6/v5代码 + 训练数据集

基于YOLO系列模型的商品标签识别系统能够有效解决商品信息提取的自动化问题。通过合理的数据集准备、模型训练和UI设计,我们可以实现一个功能强大的商品标签识别系统。希望本文提供的内容能够为大家提供有价值的帮助。

YOLO 474

《重构:改善代码的既有设计》读书笔记

本文已同步发表在博客园:http://www.cnblogs.com/davidsheh/p/5239745.html 第1章 重构,第一个案例 代码块俞小,代码的功能就俞容易管理,代码的处理和移动也就俞轻松。(功能也就越单一) 任何不会被修改的变量都可以被当成参数传入新的函数,至于会被修改的变量需要慎重。如果只有一个变量会被修改,可以把它当做返回值。 绝大多数情况下,函数应该放在它所使用的数据的所

Sheh伟伟的博客 5770

信奥赛csp初赛高频考点【位运算】(详细解析)

信奥赛csp初赛高频考点【位运算】(详细解析)

王老师青少年编程 371

读《重构:改善既有代码的设计》的思考

重构不是一个一蹴而就的事,需要长期的实践和经验才能够完成得很好。我们重构强调的是 使代码变得更好,拥有代码洁癖。

简单猿 2662

STM32G0/G4电机控制中三角函数与浮点运算优化实战

三角函数(sin/cos)和浮点运算是电机矢量控制(FOC)的核心基础,直接影响Clark/Park变换、SVPWM及观测器的实时性与精度。在资源受限的MCU上,标准math.h库因无硬件FPU支持而引发严重时序抖动,导致电流环延迟、转矩脉动增大甚至系统复位。通过硬件加速(如STM32G4的CORDIC协处理器)或定制化定点算法(如STM32G0的查表+线性插值),可将sin/cos计算从数十微秒压缩至1–3 μs量级,提升30倍以上效率。该方案广泛适用于BLDC/PMSM驱动、伺服控制及高动态响应嵌入式运

weixin_35751412的博客 110

置顶必读(1) | 《YOLOv26实战:从入门到深度优化》专栏导读与完整目录导航(持续更新中)

🏆 本文收录于 《YOLOv26实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现 YOLOv26 官方特性、核心改进、多任务支持、部署优化与行业落地,内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么用”,更讲“为什么这样设计、如何真正落地到项目中”。

**My Coding Family** 9万+

图书推荐4:《重构:改善既有代码的设计》

如果你是一名软件开发人员,那么《重构:改善既有代码的设计》这本书绝对值得你学习和研究。首先,重构是一项非常重要的技能,它可以使得代码更加清晰、易读、可维护和高效。而在实践中,很多开发者往往只关注代码的功能性,而忽略了代码的质量和可维护性,从而导致后期的维护、升级和扩展变得异常困难。

madifu的博客 1038

华为OD干了两个月,还是跑了

​本人工作了快13年,base南京。2024年2月份由于公司业务变动第一次拿到了公司发的大礼包,同时也面临着失业的问题,我对自己的技术还是很有信心的,但是,找了大概有一个多月时间,发现心意的工作的确不太好找,当然收到挺多家offer,就是薪资不太满意,外包也一直不想去,不过说实话外包给的薪资普遍要比自研的单位要高一些,最后为了钱还是进华为(既然选择外包那就选择好一些的吧),毕竟中年老男人工作不能断太久。

啊渊的专栏 1万+

《重构:改善既有代码的设计(第2版)》起始

《重构》不仅是一本书,更是一种软件开发的理念。我是按照我们一个领导、前辈的推荐来读这本书的;它引导我们通过小步骤的方式,不断地调整代码,以适应变化的需求。在这个过程中,书中详细介绍了各种重构技术,从简单的函数提炼到复杂的重构手法,一步步为我们展开了代码改善的大门。《重构:改善既有代码的设计(第2版)》为我们打开了代码优化的大门,通过深入学习和实际应用,我们能够在不断变化的软件开发世界中更加从容地应对挑战。希望通过这次学习,能够在我们的项目中创造出更加清晰、灵活的代码结构,提升整体开发效率。

WayneHu的博客 704

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

重构 :改善既有代码的设计

笔记,回顾

DuGuYiZhao的博客 3876

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

《重构:改善既有代码的设计》——关于代码注释的唠叨

  这几天在看《重构:改善既有代码的设计》英文评注版这本书,以前简单看过这本书,但并不是看的特别深入。经过了一段时间的“磨练”,现在回来重新看这本书,又很多想法。   首先,这本书是一本好书,我感觉是软件工程师必看的一本书,而且如果有大量的编码经验看这本书会收获很大。这本书主要内容是代码重构。   在书中第3章中有这样一段话是用来描述代码注释的:   A good time to use...

weixin_30472035的博客 248

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《重构:改善既有代码的设计》 重新组织数据  之 3

《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍: 将值对象改为引用对象 change value to reference 名称:将值对象改为引用对象 change value to reference 概要:从一个类衍生出许多彼此相等的实例,希望将它们替换为同一个对象。将这个值对象变成引用对象 动机: 你希望给这个对象加入一些可修改数据,并确保对任...

giantmfc123 224

「重构:改善既有代码的设计」实战篇

正确定义问题,比解决问题重要一百倍。那我们首先来搞清楚什么叫重构?作为(名词),重构是指在不改变软件外在功能的前提下,调整其内部结构的过程。这样的调整旨在提高软件的可理解性和降低修改成本。作为(动词),重构意味着通过一系列细微的步骤,不断地调整软件结构,以保持其设计的整洁和可维护性。重构是一种精练的技艺,它通过小的、计划好的修改来减少引入错误的风险。本质上,重构是对已完成的代码进行设计上的改进。

无休居士的博客 1681

《重构:改善既有代码的设计》 重新组织数据  之 1

《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍: 自封装字段 self encapsulate field 名称:自封装字段 self encapsulate field 概要:为该字段建立取值/设值函数,并且只以这些函数来访问字段 动机: 直接访问一个字段,但与字段之间的耦合关系逐渐变的笨拙。完成自我封装后,可以在子类中根据自己的需要随意覆写取值/...

giantmfc123 701

【读书笔记】重构:改善既有代码的设计(第二版)

《重构:改善既有代码的设计(第二版)》读书笔记

qq_40690815的博客 803

《重构:改善既有代码的设计》 在对象之间搬移特性  之 2

《重构:改善既有代码的设计》中提到过很多重构方法,关于在对象之间搬移特性的方法有9种。本文介绍: 搬移字段 move field 名称: 搬移字段 move field 概要:在目标类新建一个字段,修改源字段的所有用户,令它们改用新字段。 动机:在程序中,有个字段被其所驻类之外的另一个类更多的用到。 做法: 如果字段的访问级别是public,使用encapsulate field将它...

giantmfc123 328

《重构:改善既有代码的设计》读书笔记(持续更新中)

背景(我也不知道这个算不算读书笔记,书本知识点整理和个人理解内容可跳至下面正文): 最近过年加找工作一直没想起来整理学习内容, 时间都很零碎。回想一下, 的确一直以来都是为了完成项目去看知识点。 除了刚开始想转行做IT的时候跟着慕课网的两条前后端路线系统地学习了一下, 但是终究囫囵吞枣。 前几天刚好有被问到《重构》这本书的内容。这两天临时抱佛脚看一下。 有了一定量的代码量积累的现在, 带着些许...

yytoo2的博客 2459

《重构:改善既有代码的设计》第六章摘要

《重构:改善既有代码的设计》第六章摘要1.提炼函数(Extract Function)说明:把一个方法里的部分代码抽出为一个方法使用条件注意要点做法2.内联函数(Inline Function)说明:是提炼函数的反操作.即把一个方法删除,把其方法内部的代码放在调用该方法的位置.使用场景注意要点做法3.提炼变量(Extract Variable)说明:是把一个表达式的返回值赋值给一个变量使用场景注意要点做法4.内联变量(Inline Variable)说明:提炼变量的逆操作.把被表达式赋值的变量,还原为使用表

baixf的博客 511

【免费下载】 《重构:改善既有代码的设计》第二版 资源下载

《重构:改善既有代码的设计》第二版 资源下载 【下载地址】重构改善既有代码的设计第二版资源下载分享 本仓库提供Martin大叔的经典著作《重构:改善既有代码的设计》第二版的资源文件下载。该版本全面更新,以反映编程领域的关键变化。书中包含更新的重构目录,并提供了JavaScript代码示例以及新的函数式示例,展示了在没有类...

gitblog_06619的博客 491

《重构:改善既有代码的设计》 重新组织数据  之 2

《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍: 以对象取代数据值 replace data value with object 名称:以对象取代数据值 replace data value with object 概要:有一个数据项,需要与其他数据和行为一起使用才有意义。将数据项变成对象 动机: 开发初期,以简单的数据线表示简单情况。比如一个字符串...

giantmfc123 297

《重构:改善既有代码的设计》 重新组织数据  之 10

《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有16种。本文介绍: 封装字段 encapsulate field 名称:封装字段 encapsulate field 概要:类中存在一个public字段,将它声明为private,并提供相应的访问函数 动机:数据隐藏 做法: 为public字段提供取值/设值函数 找到这个类以外使用该字段的所有地点。如果客户只是读...

giantmfc123 336
上一篇: 漫谈重构
下一篇: 重构与模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值