一、重构,第一案例

IntelliJ IDEA在Java领域的代码重构实践案例 本文旨在为Java开发者提供IntelliJ IDEA中代码重构的全面指南,从基础到高级技巧,帮助开发者理解并应用这些功能来改善代码质量。介绍代码重构的基本概念详解IntelliJ IDEA的重构功能通过实际案例展示重构过程讨论高级重构技巧和最佳实践重构(Refactoring):在不改变代码外部行为的前提下,改善代码内部结构的过程:集成开发环境,提供编码、调试、测试等功能的软件代码重构就像整理你的房间。 阅读详情

       重构是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。它的本质是在代码写好之后改进它的设计。

       重构的特点是可以无须在编码开始前进行良好的设计,编码完成后,可借由重构可将它加工成设计良好的代码。当然起初有个良好的设计,可以减少重构的工作量。

      重构之前的准备工作:搭建可靠的测试环境,需具有自检功能。

      重构的步骤或节奏是测试,小修改,测试,小修改,测试,小修改........。正是这种节奏让重构得以快速而安全地前进。

     要点:如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地那么做,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。

      这一章影片出租代码需改进的地方和改进方法:

     (1)statement()函数太长,做了很多原本应该由其它class完成的事情。方法:找出逻辑泥团,并运用Extract Method方法,将它提炼到独立函数,最后易名,好的代码应该清楚表达自己的功能,变量名称是代码清晰的关键,帮需易名。

     (2)观察amountFor()时,发现这个函数使用了来自Rental class的信息,却没有使用来自Customer class的信息,由于绝大多数情况下,函数应该放在它所使用的数据的所属对象(或说class)内,所以amountFor()应该移到Rental class去。方法:运行Move Method。

     (3)临时变量thisAmount如今变得多余了,它接爱each.getCharge()的执行结果,然后就不再有任何改变。方法:运用Replace Temp with Query把thisAmount除去。

     (4)由于可能多个地方用到totalAmount和frequentRentalPoints这两个临时变量,故提取这两个变量。方法:运用Replace Temp with Query,并利用所谓的query method来取代totalAmount和frequentRentalPoints。

     (5)在getcharge()函数中,在movice class的属性基础上运用switch语句,这暗示getcharge()应该移到Movie class里头去,为了让它得以运行,必须把[租期长度]作为参数传递进去。当然,[租期长度]来自Rental对象。这就有一个疑问:为什么选择[将租期长度传给Movie对象]而不是[将影片类型传给Rental对象]呢?因为该系统可能发生的变化是加入新影片类型,这种变化带有不稳定倾向。如果影片类型有所变化,希诅掀起最小的涟漪,所以我选择有Movie对象内计算费用。方法:运行Move Method。

     (6)存在多数影片类型,它们以不同的方式回答相同的问题,这听起来像是subclasses的工作。方法:运用多态来取代switch语句。这有个问题:影片在生命周期内可能改变类型,但Movie对象在生命周期内是不可改变类型的,故引入state模式加入一层间接件,在Price的子类进行与影片类型相关的动作,这汲及三个重构准则:首先运用Replace Type Code with State/Strategy,将[与类型相依的行为]搬移至state模式内。然后运用Move Method将switch语句移到Price class里头。最后运用Replace Conditional with Polmorphism去掉switch语句。

《重构 改善既有代码的设计》之重构,第一个案例详解 附件是自己在阅读重构 改善既有代码结构的设计第一章时整理的思路,跟随Martin Fowler成为攻城狮是不错的,提升专业编码能力 立即下载

相关推荐

使用Anaconda和conda快速搭建YOLO开发环境

本文详细介绍了如何使用Anaconda和conda为YOLO目标检测项目快速搭建独立、纯净的开发环境。通过创建虚拟环境,有效解决了Python包版本冲突和CUDA兼容性问题,并指导安装GPU版PyTorch等核心依赖,最后通过验证脚本确保环境配置成功,为YOLO开发提供了稳定可靠的基础。

weixin_28829629的博客 161

第一个重构案例

目录 重构前类图: 重构前源程序: Movie.java Rental.java Customer.java 重构:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减少整理过程中引入错误的几率。本质上说,重构就是在代码写好之后改进它的设计。 第一个重构案例展示了一个小程序,如何一步一步地将其从结构化程序重构为面向对象程序,使其能够更方便快捷地去修改以满足之后的需求。 实例:影片出租店所用程序,计算..

我开始懂了的博客 1219

使用C#调用百度地图并实现坐标点的设置以及读取

使用C#调用百度地图申请百度地图密钥以及查看百度API程序实现功能:最终图利用webBrowser控件展示地图 申请百度地图密钥以及查看百度API 网址:http://lbsyun.baidu.com/apiconsole/key#/home 网址:http://lbsyun.baidu.com/jsdemo.htm#c1_3 程序实现功能: 1、输入网址那可以调用本地的html文件,也可以访问其他网站 2、输入坐标、添加坐标按钮,可以将坐标值传入html文件中,显示在经纬度的文本框中 3、定位按钮可以

qq_39261042的博客 3734

《重构-改善代码既有的设计》重构,第一个案例

起点:编写3个类的代码 1、第一个类-影片(Movie):package com.lee.test.aFirstExample;public class Movie { /** * @param title * @param priceCode */ public Movie(String title, int priceCode) {

limuzi13的专栏 3242

Python量化交易实战:如何用vnpy+Tushare获取股票历史数据(附完整代码)

本文详细介绍了如何利用vn.py框架与Tushare数据接口,构建一个健壮的Python量化交易数据获取引擎。通过封装Tushare API,实现股票历史数据的自动化获取与格式转换,并适配vn.py的BarData结构,为策略回测与实盘交易提供稳定、高效的数据基础。文中提供了完整的代码实现,涵盖环境配置、核心封装逻辑及高级功能扩展。

cola5的博客 1218

Innovus中_clock_gen skew group的隐藏陷阱:如何避免自动分组导致的时序问题

本文深入剖析了在Innovus工具进行时钟树综合(CTS)时,`_clock_gen` skew group自动分组机制可能引发的隐蔽时序问题。文章通过实际案例,解释了该机制如何错误地将分频寄存器与配置寄存器归为一组,从而破坏时钟域边界并导致post-CTS时序违例,并提供了关闭自动提取、手动精确定义skew group等有效解决方案。

gpu4optimizer的博客 266

重构--第一个案例

1.1 起点实例非常简单。这是一个影片出租店的程序,计算每一位顾客的消费金额并打印详单。操作者告诉程序:顾客租了哪些影片、租期多长,程序便根据租赁时间和影片类型算出费用。影片分为三类:普通片、儿童片和新片。除了计算费用,还要为常客计算积分,积分会根据租片种类是否为新片而有所不同。 我会逐一列出这些类的代码。Movie(影片)public class Movie { public stati

天道酬勤 3545

72-dify案例分享-揭秘!如何用 Dify 实现多语言 PDF 文档原格式翻译

本文围绕 Dify 1.6 + 版本,演示搭建 PDF 文档翻译 Agent:配置 MCP 服务、构建 Agent 并以 URL 传文件测试,实现高效翻译,展现 MCP 跨工具复用与简化集成的优势,助力 AI 应用开发。

个人技术 2285

一 重构,第一个案例

作为一个经验丰富的开发者,你可以肯定:不论用户提出什么方案,你唯一能够获得的保证就是他们一定会在六个月之内再次修改它。 如果你发现自己需要为一个程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。 重构前,先检查自己是否有一套可靠的测试机制。这些测试必须有自我检验能力。 当提炼一个函数是,必须知道可能...

qq_35356190的博客 251

Moviepy自动化剪辑视频中的广告

本教程展示了如何使用 Python 中的 MoviePy 库,通过检测和剪辑广告段落来实现视频内容的清洁播放。通过广告检测算法和 MoviePy 剪辑功能的结合,可以自动化处理视频,极大提升编辑效率。在学习和应用中,理解广告检测的原理及其实现方法尤为重要,以便针对不同类型的视频进行调整。此外,MoviePy 的灵活性使其适用于多种视频编辑场景,适合自动化内容制作与优化。

Mr数据杨 3406

msf后渗透之获取登入password、远程控制、调用摄像头

在terminal输入load kili creds_all直接获取密码(不一定成功) 使用kiwi_cmd sekurlsa::logonpasswords获取密码

m0_61506558的博客 2962

重构改善既有代码的设计《一》第一个案例

##1.1 起点 如果你发现子级需要未程序添加一个特性,而代码结构使你无法方便的达到目的,那么就先重构那个程序,使特性的添加比较容易的进行,然后再添加特性 ##1.2 ...

qq_42511550的博客 371

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

重构-改善既有代码的设计(一)--重构第一个案例

什么是重构 在不改变代码外在行为的前提下,对代码做出修改以改进程序内部的结构 简单地说就是在代码写好后改进它的设计 谁该阅读这本书 专业程序员(能够提高你的代码质量) 资深设计师和架构规划师(理解为什么需要重构,哪里需要重构) 阅读技巧 带着疑问去读: - 如果你想要知道重构是什么。第1章够了 - 如果你想要知道为什么要重构,第1,2章 - 如果你想知道该在什么...

木木甫的博客 1025

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

重构-改善既有代码的设计(一):第一个案例

1、分解并重组长函数 (1)代码块越小,代码功能就越容易管理 (2)重构之前先检查是否有一套可靠的测试机制 (3)做了修改就要编译并测试,保证自己没有破坏任何东西 2、更改变量名称 (1)代码应该表现自己的目的 3、移动函数 (1)一般函数应该放在它所用的数据的所属对象内 (2)有时保留旧函数,调用新函数,如果旧函数是public,不必修改其他接口 4、尽量去除临时变量 (1)...

东晨雨的博客 402

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

重构-改善既有代码的设计(一)--重构,第一个案例

什么是重构 在不改变代码外在行为的前提下,对代码做出修改以改进程序内部的结构简单地说就是在代码写好后改进它的设计 谁该阅读这本书 专业程序员(能够提高你的代码质量) 资深设计师和架构规划师(理解为什么需要重构,哪里需要重构) 阅读技巧 带着疑问去读: 如果你想要知道重构是什么。第1章够了 如果你想要知道为什么要重构,第1,2章 如果...

weixin_33742618的博客 127

kruscal重构树

因为NOI2018第一题考了这个算法,所以就来学一下。 简介 kruscal重构树从名字上来看就一定和kruscal有联系,那么这个数据结构到底是怎么构成的呢?、 这个数据结构与正常的kruscal有一个相同的方法来做题,那么就是使用并差集,那么是如何将题目中的两点和之间连的边的边权存成并差集呢?难道是带权并差集吗?然而使用带权并差集会超时,那么我们就需要一个新的数据结构叫做kruscal重构树。...

czn的博客 523

【思维方法】之第一性原理

通常人们对事物的认知有两种逻辑形式,第一种逻辑形式叫做归纳法,归纳法是对感性经验的归纳,第二种是更高级一点的逻辑形式叫做演绎法,演绎法是对理性思维的演绎。

不曾走远的博客 1740

【《重构 改善既有代码的设计》学习笔记1】重构:第一个案例

【《重构 改善既有代码的设计》学习笔记】重构:第一个案例 本篇文章的内容来自《重构 改善既有代码的设计》一书学习笔记整理笔记并且加上自己的浅显的思考总结! 一、简单的例子 一个影片出租店用的程序,计算每一位顾客的消费金额,并打印详单。 详单打印 顾客租了哪些影片、租期多长,影片类型 、单个影片费用、总费用 。 除了费用外,还要计算顾客的积分,不同种类租片积分不同。 注:影片为为三类:普通片、儿...

阿飞云漫步 2547

【笔记】《重构:改善既有代码的设计》第1章-重构,第一个案例

第1章 重构,第一个案例 1.1 起点 1.2 重构的第一步 第一个步骤永远相同:我得为即将修改的代码建立一组可靠的测试环境。 1.3 分解并重组statement() 长的离谱的statement()。代码块越小,代码的功能越容易管理,代码的处理和移动也就越轻松。 找出代码的逻辑泥团并运用Extract Method 我得在这段代码里找出函数内的局部变量和参数。不会被修改的变量都可以被我当成参数...

ZeromaXHe的博客 401

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

重构——在不改变软件可观察行为的前提下,改善其内部结构。 1. 如果发现你需要为程序添加一个特性,而代码结构使你无法很方便的达成目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。 2. 测试是很重要的一部分,我们应试着让测试结果可以进行自我检验,这样我们可以节约大量的时间,大大提高开发速度。 3. 代码块愈小,代码的功能就愈容易管理,代码的处理和移动也就愈轻松,希望你每次看...

只为龙舞的博客 412

读《重构-改善既有代码的设计》 one 第一章案例(java实现)

测试、小修改、测试、小修改.....小步快走,快速迭代

莫莫绵的博客 903

【重构篇js案例解析重构】第一章 重构的原则

重构的原则

donglianyou的专栏 1110

重构,第一个案例(C++版)——最初的程序

之前写过一篇文章找出那些代码里的坏味道吧——《重构》笔记(一)。简单总结了一下《重构》这本书中的重点以及作者总结的“代码里的坏味道”。 这样的总结比较抽象,这里我将写一个系列文章,主要想通过案例来让大家具体的感受一下小步重构的魅力。使用的例子也是Martin Fowler《重构》一书中第一章的案例。不过书中案例是用Java写的,这里我将其改为了C++程序。希望这样对C++程序员能更好的理解重构。 ...

吴尼玛cs 822
上一篇: epoll两种触发方式
下一篇: /dev/null 2>&1 详解
whycold
博客等级 码龄19年 280粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值