`
nbkangta
  • 浏览: 434049 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
 
阅读更多

最近公司开展读书月活动,免费提供书籍要求读完上交读书笔记一篇

 

我借了《重构——改善既有代码的设计》,在这边小小做下笔记

 

重构手法:

1、Extract Method 提炼函数

     必须考虑局部变量的使用,基本分为1)没有局部变量影响 2)局部变量在抽取代码段中只是读取 3)局部变量在代码段中有修改这3中情况

做法:

      创造一个新函数,根据这个函数的意图来对它命名(以它做什么命名,而不是以它怎么做命名)

将提炼出的代码从源函数复制到新建的目标函数中

仔细检查提炼出的代码,看看其中是否引用了“作用域限于源函数”的变量(包括局部变量和源函数参数)

检查被提炼代码段,看看是否有任何局部变量的值被它改变

将被提炼代码段中需要读取的局部变量,当做参数传给目标函数

处理完所有局部变量之后,进行编译

在源函数中,将被提炼代码段替换为对目标函数的调用

编译测试

 

2、Inline Method 内联函数

     这种重构是清楚间接引用带来的复杂度的手法,目标函数必须足够简单,源函数已经足以说明函数用途

做法:

检查函数,确定它不具有多态性

找出这个函数所有被调用点

将这个函数的所有被调用点都替换为函数主题

编译测试

删除该函数的定义

 

3、Inline Temp 内联临时变量

做法:

检查给临时变量赋值的语句,确保等号右边的表达式没有副作用

如果这个临时变量并未被生声明为final,那就将它声明为final,然后编译

找到该临时变量的所有引用点,将他们替换为“为临时变量赋值”的表达式

每次修改后,编译并测试

修改完所有引用点后,删除该临时变量的声明和赋值语句

编译测试

 

4、Replace Temp with Query 以查询取代临时变量

分享到:
评论

相关推荐

    微软研发探秘系列课程(6):微软研发揭秘之贺岁版——2006年程序员书籍畅谈 (思想篇)

    例如,可能讨论了《重构:改善既有代码的设计》如何帮助开发者提升代码质量,或者《设计模式:可复用面向对象软件的基础》如何指导团队实现模块化设计。 课程中可能包含的PPT部分,会系统地梳理这些书籍的核心观点...

    基于工作过程的《ASP.NET程序设计》课程教学改革实践——以广西农业职业技术学院为例.pdf

    传统教学模式下,ASP.NET程序设计课程侧重于理论知识的灌输,学生往往通过听讲、做笔记的方式被动接受知识。这种方法虽然能够让学习者掌握一定的基础理论,但往往忽视了对工作过程中实际问题解决能力的培养。为了...

    最新修《色彩构成》教学大纲.doc

    课程鼓励学生在课外进行实践探索,通过诸如Photoshop这样的数字工具深入探索色彩的应用,并通过阅读文献、撰写读书笔记来加深对课程内容的理解。考核方式也是全面综合的,不仅包括学生的课堂表现、实践操作和课堂...

    cole_02_0507.pdf

    cole_02_0507

    工程硕士开题报告:无线传感器网络路由技术及能量优化LEACH协议研究

    内容概要:南京邮电大学工程硕士研究的无线传感器网络路由技术。通过对无线传感器网络路由协议的历史和研究现状进行了详细探讨,着重介绍了SPIN、LEACH、TEEN、pEGASIS等常见协议的特点、优势与局限性。文中分析了现有路由协议中的能量管理和网络覆盖问题,并提出了一种结合最大覆盖模型的改进型能量LEACH协议来应对这些问题。该研究旨在提高无线传感网络能量效率和覆盖效果,从而拓展其在各行业尤其是环境监测和军事安全领域的大规模应用。 适合人群:本篇文章主要面向具有无线传感网路研究背景或对此有兴趣的研究人员、工程师和技术爱好者,特别是在能源消耗控制上有较高需求的应用开发者。 使用场景及目标:①帮助理解和选择合适的无线传感器网络路由技术;②指导开发新路由协议时关注的关键要素;③为企业实施物联网相关项目提供理论支撑。 其他说明:文章强调了优化算法对于改善系统性能的重要性,并展示了具体的实施方案。通过仿真实验对不同协议的效果进行了验证,体现了科学研究的严谨态度与实践导向。

    【东海期货-2025研报】东海贵金属周度策略:金价高位回落,阶段性回调趋势初现.pdf

    【东海期货-2025研报】东海贵金属周度策略:金价高位回落,阶段性回调趋势初现.pdf

    图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作)

    【资源介绍】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,也可以作为小白实战演练和初期项目立项演示的重要参考借鉴资料。 3、本资源作为“学习资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研和多多调试实践。 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip

    diminico_02_0709.pdf

    diminico_02_0709

    agenda_3cd_01_0716.pdf

    agenda_3cd_01_0716

    A课件Python全栈开发线下班.zip

    目录: 第1章 Linux命令入门及VIM编辑器 第2章Python基础 第3章Python面向对象编程 第4章数据结构与算法 第5章UDP与TCP通信 第6章多进程编程 第7章多线程编程 第8章协程 第9章正则表达式 第10章 Http协议 Web服务器并发服务器 第11章网络通信过程 第12章 Python提高1 第13章 Python提高2 第14章 Mysq|基本使用 第15章 Mysq|查询 第16章Mysql与Python交互 第17章Mysql高级 第18章WSGI-miniWeb框架 第19章闭包装饰器 第20章 mini-web框架 添加路由-MySQL功能 第21章 mini-web框架 添加log日志路由支持正则 第22章元类与ORM-面向接口编程

    diminico_02_1108.pdf

    diminico_02_1108

    基于人工智能大模型技术的果蔬农技知识智能问答系统.pdf

    基于人工智能大模型技术的果蔬农技知识智能问答系统.pdf

    diminico_02_0307.pdf

    diminico_02_0307

    dawe_3cd_01_0717.pdf

    dawe_3cd_01_0717

    anslow_3ck_01_0319.pdf

    anslow_3ck_01_0319

    C#全自动多线程上位机源码编程:替代传统PLC触摸屏、以太网通信,强大功能多级页签,支持西门子PLC和OPC,安装KepserverEx5,链接其他数据库,C#多线程自动化工控屏幕上位机源码编程系统:

    C#全自动多线程上位机源码编程:替代传统PLC触摸屏、以太网通信,强大功能多级页签,支持西门子PLC和OPC,安装KepserverEx5,链接其他数据库,C#多线程自动化工控屏幕上位机源码编程系统:功能强大,多级页签,通信灵活,兼容多种配置与数据库连接,C#全自动多线程上位机源码编程 0, 纯源代码。 1, 替代传统plc搭载的触摸屏。 2, 工控屏幕一体机直接和plc通信。 3, 功能强大,多级页签。 4, 可以自由设定串口或以太网通信。 5, 主页。 6, 报警页。 7, 手动调试页。 8, 参数设定页。 9, 历史查询页。 10,系统设定页。 11, 赠送所有控件。 12,使用的西门子Plc。 13,注册opcdaauto.dll组件,用于使用opc。 15,安装kepserverEx5。 16,可以链接其他数据库。 ,核心关键词: C#; 全自动多线程; 上位机源码编程; 纯源代码; PLC替代; 通信; 强大功能; 多级页签; 串口或以太网通信; 主页; 报警页; 手动调试页; 参数设定页; 历史查询页; 系统设定页; 控件赠送; 西门子PLC; OPC

    移动应用开发全流程解析:从创意到上线与推广的最佳实践

    内容概要:本文详细介绍了移动应用开发的全过程,从创意构思和需求分析开始,依次阐述了原型设计、技术选型、前后端开发、测试优化、上线准备到最后的推广和后续维护,帮助读者深入了解和掌握各个环节的要点和最佳实践,特别注重实际操作中的问题和解决方法。文章不仅涵盖技术层面的内容,还包括市场营销和社会影响等方面的探讨。 适合人群:移动应用开发初学者和有一定经验的开发者,想要了解移动应用从构想直到推向市场全部过程的专业人士。 使用场景及目标:指导新创企业和个体开发者从零开始制作自己的应用程序,提供系统的理论知识以及实用技能指导。 阅读建议:本文适合分章节细读,尤其对于每个关键阶段,可以结合具体的案例研究深入理解;在实践应用时应注意参考文中提到的实际开发中容易碰到的问题及其解决方案。

    axios-v0.18.0

    axios-min.js

    Rust语言教程:从入门到进阶 Rust是一门注重性能、内存安全以及并发的系统编程语言 它被设计用来替代C和C++,同时提供更高的安全性和更好的并发支持 本教程将引导你从Rust的基础语法开始,逐步掌

    Rust语言教程:从入门到进阶 Rust是一门注重性能、内存安全以及并发的系统编程语言。它被设计用来替代C和C++,同时提供更高的安全性和更好的并发支持。本教程将引导你从Rust的基础语法开始,逐步掌握到更高级的概念。 一、Rust入门 1. Rust安装 工具链安装:通过rustup安装Rust工具链,它包含Rust编译器、Cargo包管理器以及标准库文档。 验证安装:在终端运行rustc --version和cargo --version来检查Rust和Cargo是否成功安装。 2. Hello, World! 创建一个新的Rust项目:cargo new hello_world --bin。 进入项目目录:cd hello_world。 编辑srcmain.rs文件,添加fn main() { println!(Hello, World!); }。 编译并运行项目:cargo run。 3. Rust基础语法 变量:使用let关键字声明变量,默认情况下变量是不可变的(immutable)。 数据类型:整数(i32, u32等)、浮点数(f32, f64)、布尔值(bool)、字

    anslow_05_0109.pdf

    anslow_05_0109

Global site tag (gtag.js) - Google Analytics