关于代码重构的一些疑问

问题描述

今天在看代码重构方面,有点疑问,不知道如果解决在参考书上有这样一个列子:publicclassOrder{SomeMethod//方法如下有如下逻辑{1、求订单总额2、订单总额减去一定的优惠价格,得到一个优惠价格3、优惠价格的基础上,再打一定的折扣优惠。}}

代码重构以后,将上面的三个逻辑提取了变成如下publicclassOrder{Method(1){求订单总额}Method(2){订单总额减去一定的优惠价格,得到一个优惠价格}Method(3){优惠价格的基础上,再打一定的折扣优惠。}}

毋庸置疑,上面的代码的确清晰了很多,三个方法很清晰。如果知道的人,那肯定会按照Method(1)、Method(2)、Method(3)的方法进行调用。但是如果不知道的人Method(1)、Method(3)、Method(2)的方式调用,那就出现错误了。违背了当初的逻辑。我想问下,为什么要这样重构代码呢,这样的重构会带来怎么样的好处和坏处呢

解决方案

解决方案二:
1.这样重构是为了保证最小功能,解耦。耦合越小,修改越方便2.有关调用顺序,由SomeMethod方法本身保证,Method(1)、Method(3)、Method(2)如果都是内部使用,外面的人没必要知道细节,他声明为私有即可。也就是说只有编写和修改代码的人才知道,既然此人是负责该事情滴,那么自然知道调用顺序3.如果Method(1)、Method(3)、Method(2)是对外公开方法,那么就有调用顺序问题。此时一般还是声明为保护级别,由继承者参考文档说明去实现。如果非要是公开方法,则需要内部检查调用顺序(当然这种方式并不合理,只是在某些特殊场合才会看到这种强制的调用顺序规定)
解决方案三:
重构之前,如果出现不打折的情况,要怎么处理。如果要修改折扣百分比修改逻辑要修改多少。重构之后,可以处理的情况更多了。比如不打折,只Method1就好了。打一次折,Method1Method2或者Method1Method3打两次折Method1method2method3重构之后修改打折的逻辑也可以单独修改,修改完成后重新组合又可以使用。======================================================================================这个重构例子说的不是让所有方法都这么拆分,而是要根据具体的需求,将逻辑变得能够应变更多的修改,应变更多的组合。这本《Refactor》原版我看过,后面解释为何要这么重构,分析跟上面我说的好像是类似的。最后,学重构不要痴,重构过度就不好了。=======================================================================================重构过度的例子:还是上面的代码,但是这次是输出“我爱你”三个字,后期不会修改,程序只用一次。非要分成三个方法分别输出三个字……这就过度了。
解决方案四:
引用楼主hflkl1314的回复:

我想问下,为什么要这样重构代码呢,这样的重构会带来怎么样的好处和坏处呢

书中有解释,不要只看书里面的代码。重构跟编码是两回事儿,学习方法不一样。
解决方案五:
引用1楼wanghui0380的回复:

1.这样重构是为了保证最小功能,解耦。耦合越小,修改越方便2.有关调用顺序,由SomeMethod方法本身保证,Method(1)、Method(3)、Method(2)如果都是内部使用,外面的人没必要知道细节,他声明为私有即可。也就是说只有编写和修改代码的人才知道,既然此人是负责该事情滴,那么自然知道调用顺序3.如果Method(1)、Method(3)、Method(2)是……

我个人认为在此项逻辑关系中,不应该拆分,对于耦合性很小的,这样的重构我觉得是有意义的。不知道这样的理解对不对。
解决方案六:
引用2楼sunzongbao2007的回复:

重构之前,如果出现不打折的情况,要怎么处理。如果要修改折扣百分比修改逻辑要修改多少。重构之后,可以处理的情况更多了。比如不打折,只Method1就好了。打一次折,Method1Method2或者Method1Method3打两次折Method1method2method3重构之后修改打折的逻辑也可以单独修改,修改完成后重新组合又可以使用。====……

恩,我觉得是要按照实际情况来重构,看到这个例子,有疑问。所以想请教下大家
解决方案七:
引用5楼hflkl1314的回复:

恩,我觉得是要按照实际情况来重构,看到这个例子,有疑问。所以想请教下大家

重构的做法是从因需求的改变而产生的,最被期待的重构结果也是能应需求的改变,智能的重构则是举一反三。既然取之于民,则用之于民。
解决方案八:
重构说白了就是功能最小化,相互之间解耦还有就是重用

时间: 2024-09-17 08:58:20

关于代码重构的一些疑问的相关文章

示例详解Laravel重置密码代码重构_php技巧

1.首先确定重置密码的路由 我们在安装好laravel的时候默认生成的重置密码是在用户未登录的情况下进行的.所以使用原来的控制器是不可行的,并且原有的重置密码,并不需要查看原始密码是否正确,而是通过邮件来进行直接更改密码,所以控制器方法的话,我们也需要重新写个.我们使用php artisan make:controller UserController创建一个控制器类,然后创建两条路由Route::get('reset', 'UserController@getReset')和Route::po

Hi,我们的代码重构了

 作为一名程序员,我最大的愿望是自己写的代码,能够被人称赞,一直留存在项目里,直到永远.能够让自己的代码一直留存在项目里,一方面自己写的代码要健壮,没有任何逻辑错误.另一方面,还要具有很好的扩展性,能够适应需求的变化.对于前者来说,只要有个两三年的基本功,基本上就能保证代码的质量.然而,要写出具有扩展性的代码,却是一件比较困难的事情.       不是因为具有可扩展性的代码不好写,而是因为这个度不好把握.我们知道系统的可扩展性总是与系统的业务和性能成反比,因此,我们不会在追求系统的扩展性上而忽略

代码重构(二):类重构规则

在上篇博客<代码重构(一):函数重构规则(Swift版)>中,详细的介绍了函数的重构规则,其中主要包括:Extract Method, Inline Method, Inline Temp, Replace Temp with Query, Introduce Explaining Variable, Split Temporary Variable, Remove Assignments to Parameters, Replace Method with Method Object等.关于

代码重构(一):函数重构规则

重构是项目做到一定程度后必然要做的事情.代码重构,可以改善既有的代码设计,增强既有工程的可扩充.可维护性.随着项目需求的不断迭代,需求的不断更新,我们在项目中所写的代码也在时时刻刻的在变化之中.在一次新的需求中,你添加了某些功能模块,但这些功能模块有可能在下一次需求中不在适用.或者你因为需求迭代与变更,使你原有的方法或者类变得臃肿,以及各个模块或者层次之间耦合度增加.此时,你要考虑重构了.   重构,在<重构,改善既有代码的设计>这本经典的书中给出了定义,大概就是:在不改变代码对外的表现的情况

代码重构(六):代码重构完整案例

无论做什么事情呢,都要善始善终呢.前边连续发表了5篇关于重构的博客,其中分门别类的介绍了一些重构手法.今天的这篇博客就使用一个完整的示例来总结一下之前的重构规则,也算给之前的关于重构的博客画一个句号.今天的示例借鉴于<重构,改善既有代码的设计>这本书中的第一章的示例,在其基础上做了一些修改.今天博客从头到尾就是一个完整的重构过程.首先会给出需要重构的代码,然后对其进行分析,然后对症下药,使用之前我们分享的重构规则对其进行一步步的重构. 先来聊一下该示例的使用场景(如果你有重构这本书的话,可以参

关于代码重构:是微修还是全部推倒重来

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 虽然不是很切题但还是放在Cocos2D的学习系列博文中吧,因为这是我写cocos2D代码中体会到的. RPG游戏码代码到现在已经写了不少行代码了. 最近在加入新功能的时候发现以前遗留的人物对话问题一直没有解决,游戏对话逻辑是RPG中重要的逻辑,而我的代码问题具体表现在: 对话代码逻辑及其复杂.因为以前从来没有写过类似的代码,要想支持游戏剧情的复杂性,必须将对话

代码重构(三):数据重构规则

在<代码重构(一):函数重构规则(Swift版)>和<代码重构(二):类重构规则(Swift版)>中详细的介绍了函数与类的重构规则.本篇博客延续之前博客的风格,分享一下在Swift语言中是如何对数据进行重构的.对数据重构是很有必要的,因为我们的程序主要是对数据进行处理.如果你的业务逻辑非常复杂,那么对数据进行合理的处理是很有必要的.对数据的组织形式以及操作进行重构,提高了代码的可维护性以及可扩展性. 与函数重构与类重构类似,对数据结构的重构也是有一定的规则的.通过这些规则可以使你更

推荐五款优秀的PHP代码重构工具

在软件工程学里,重构代码一词通常是指在不改变代码的外部行为情况下而修改源代码.软件重构需要借助工具完成,而重构工具能够修改代码同时修改所有引用该代码的地方.本文收集了五款出色的PHP代码重构工具,以帮助你完善更加优秀的项目. 1. Rephactor Rephactor是一款命令行重构工具,这是一款自动化工具,允许开发者以一种简洁的方式在不同的代码库中修改源码. 主要功能: 保证重构的可逆性-- 一旦发现问题,代码是可逆的,可以回溯到前一个版本. 查找替换功能-- 普通查找替换,方法重命名,类重

java中什么是代码重构,什么时候需要代码重构

问题描述 java中什么是代码重构,什么时候需要代码重构 java中什么是代码重构,什么时候需要代码重构 代码重构一般发生在地方,代码重构需要注意什么问题 解决方案 当你的代码不好维护,不好升级,不好管理的时候肯定是需要重新构造.每次重构都会学到很多东西.开始写代码如果质量高,需要重构的量就少.反之就多.参考这个:http://blog.mkfree.com/posts/30 解决方案二: 重构就是在不改变软件系统外部行为的前提下,改善它的内部结构.重构代码不仅仅限于java开发中,任何开发语言