重新翻了这本圣经级的关于重构的书籍,把第一章关影片租赁的例子在eclipse里重构了一把,总结一下用到的重构原则:
1. extractMethod
本例将switch和ifesle2个计算影片价格和计算影片积分的代码段提取出来,专门放入一个小方法中。其实提取出来的每一个方法都应具有一个明确的业务意义。所以欲所重构,必先熟悉业务,否则没有办法提取出小方法。
2. 代码代码命名rename和代码注释comment
关于代码命名,一段代码的生命意义,不是被机器编译运行,而是后来的维护者可以易读易懂易维护。
关于代码注释,除非一些非常明确的代码,还是应该加上注释。我不完全认同好的代码可以不加注释之说,我相信有时候,初读者看注释一定比代码更容易。一个完整的代码注释,包括不限于版权、类注释、字段注释、方法注释、以及方法内部的注释。
3. move method
根据类的单一责任原则,每一个类只应该处理自己相关的业务。
比如本例中,将获取影片价格和积分的方法从Customer移到Rental,因为这是Reantal的责任。
4. repalce temp with query
本例中,剔除类中的临时变量,这里涉及到重构和性能的平衡。
范例:循环语句,除了取每一个变量外,还要将各个变量累加得到一个总值。重构可能导致获取总值时循环了2次,平衡吧,如果不是性能的瓶颈,请选择这种重构方式。
5.封装变化,把不变的接口留给外部
计算影片价格,需要根据影片类型和租赁日期计算。最后我们选择将租赁日期(Rental)传给Moive,因为本业务中,影片类型可能发生变化,我们希望每次发生变化,对外影响最小。
6. replace condition with polymorphism
本例中的条件语句switch和ifelse滥用,因为没有抽象出Price。Price可以有各种子类(儿童片,新片、一般片子),每个片子,都有自己计算价格和积分的规则。
7.Template method
如果业务需要例外一种打印html的报表,我们可以利用Template方法,head,detail,tail,都可以抽象出来,暴露出变化的方法,因为很多东西是可以共用的。
困惑:
1. 面对重构和性能的平衡,大家是怎么做的?一般人都会说,这个这个计算了两遍,我有时也很迷茫
2. 重构势必导致很多小方法的产生,方法太多有时觉得很乱很散,这个粒度如何控制?
3. 我们公司采用SOA的架构,因为历史原因,我负责维护的系统,和外围系统交互的本应该是VO,但是现在暴露出去的是领域模型domain,这就导致了,如果暴露出去,一般情况下我们是不能更改的,因为如果更改了势必涉及外围系统的改造,所以我们是不能像本例中那样重构代码的。如果我们内部再建一套领域模型,和暴露给外围系统的VO区分开,代价很大。
4.如果不去重构暴露出去的领域模型,也许我们可以重构每个组件,但我们的组件是按照java的面向接口编程的,如果把一个方法提取到另外一个类中,接口层和实现层都需要加一个方法,这样值得吗?
5.书上的理论只能是理论,肯定会和我们的实际有所出入,不能完全按书上的理论来,要找到适合本系统本业务的合适的重构方法。
附上中午重构后的代码
分享到:
相关推荐
c) 具有"de-", "in-", "re-"等前缀的词,其重读位置可能因词性和意义变化,比如名词"record"重读第一个音节,动词"re'cord"则重读第二个。 d) 复合词和带有前缀"re-", "ex-", "un-", "pre-"等的词,可能有两个重读...
20210307-德邦证券-德邦家电行业:重读与解构《第四消费时代》第三消费时代.pdf
### Hadoop源代码分析——基于GFS的文章重读 #### 一、引言 随着大数据技术的发展,Hadoop已经成为处理大规模数据集的核心工具之一。本文将深入探讨Hadoop分布式文件系统(HDFS)的设计原理,并通过与Google文件...
重读闭音节是英语发音规则中的一个重要概念,主要涉及元音字母在特定音节中的发音方式。在学习英语发音时,理解并掌握这一规则对于准确读出单词至关重要。 首先,我们回顾一下重读开音节。重读开音节指的是在一个...
英语语音重读是英语口语表达中的一个重要组成部分,它关乎到信息的传递清晰度以及语调的自然流畅。在英语句子中,重读的规律主要遵循以下几个原则: 首先,实词通常需要重读。实词包括名词、动词、形容词、副词、...
文章通过讲述一个痴迷于寻找和氏璧的青年的故事,展现了对传统文化的热爱和执着。这个青年,尽管被人视为“傻子”,但他坚信和氏璧的价值,历经艰辛将其发掘出来,并决心将其献给王,期待为国家带来繁荣。这种精神...
接着,设计语调和重读训练的教学活动。例如,可以组织角色扮演,让学生模仿对话中的语调和重读,提高他们的实际运用能力。还可以进行听力游戏,播放对话录音,让学生找出被重读的单词,进一步巩固他们对重读规则的...
英语发音中的音节划分和重读规则是学习者掌握地道口语的关键部分。下面将详细解释这些规则,并通过实例帮助理解。...记住,实践是提高发音的关键,不断练习读出正确的重读和弱读音节,将有助于提高口语水平。
重读的规则包括:单音节词全部重读,双音节词通常倒数第二个音节重读,带有前缀的双音节词前缀单独算一个音节并重读,如"unhappy"。 元音字母在重读和非重读音节中的发音有所不同。在重读音节中,元音通常发音更...
英语中的重读闭音节规则是英语学习中的一个重要部分,主要涉及到动词的变化形式,特别是现在分词、过去式和过去分词的构成。在英语中,闭音节是指一个元音字母后面跟着一个或多个辅音字母,并且这个音节在单词中是...
英语发音规则(重读音节和非重读音节).pdf
根据提供的文件信息,可以看出文档标题为“***-阿里妈妈-消费行业四大行业消费趋势:重读消费者”,描述中也重复了该标题。由于这部分内容没有提供实质性的内容信息,因此我们无法直接从中提取知识点。但是,从标题...
音节重读则是指在单词中,有一个音节的发音比其他音节更为突出,这就是重读音节,其余的就是非重读音节。根据重读性质,音节可分为: A. 重读音节: 1. 绝对开音节:如"ba-by",元音字母后面没有辅音,读其本音。 2...
- 虽然描述中未详细提及,但通常包括表设计、字段命名规范、索引策略、关系模型设计等,这些都需要遵循标准的数据库设计原则,如第三范式、规范化和性能优化。 4. Com和.Net互操作规范: - 当.Net应用需要与旧有...
通过研究Apache Commons IO的源代码,开发者可以学习到如何编写高效、健壮的IO代码,理解如何处理并发问题,以及如何设计良好的API接口。此外,源代码还展示了如何利用Java的异常处理机制,以及如何进行单元测试和...
《俄罗斯方块(Solaris下Java开发):代码组织与重构的艺术》 在软件开发的世界里,优秀的代码如同精心编织的诗篇,清晰、简洁且富有逻辑。然而,不幸的是,有时我们不得不面对那些“大便一样的代码”,它们结构...
双音节词至少有一个音节被重读。 3. **多音节词**:包含三个或以上音节的单词,如remember[ri'membə]、necessary['nesisəri]、university[ju:ni'və:siti]。多音节词同样有重读音节。 4. **重读音节**:在一个...
危机后,实施了两项新的缓解政策:一项取水决议(2017年)和一项关于从另一个流域重新分配水的决议(2018年)。 这项研究通过评估缓解政策对水位动态的影响,对Cantareira系统的水危机进行了新颖的调查。 使用PDM-...