前几天北京图书大厦买了两本书<<重构,改善既有代码的设计>>与<<agile with="" web="" development="" rails=""></agile>><agile with="" web="" development="" rails=""></agile>
特意把书的代码一个字一个字粘出来,望能帮助我们这些开发人员对"重构"理解提供一些帮助,
当你有一段代码可以被组织在一起独立出来
将这段代码放进一个独立函数中,并让函数名称解释该函数的用途
函数的命名是非常重要的,以前我做开发的时候,从来我就不考虑这么多,只要这个函数能跑起来就行,我也不去管那么多,现在看了"重构",感觉它有另外一种思想,望大家好好学习!!
java 代码
- void printOwing(double amonut){
- printBanner();
- //print details
- System.out.println("name:"+_name);
- System.out.println(""amount:"+amount);
-
- }
重构后的代码:
java 代码
- void printOwing(double amonut){
- printBanner();
- printDetails(amount
- }
- void printDetails(double amount){
System.out.println("name:"+_name);
- System.out.println("amount:"+amount);
- }
可以看出现在变成了两个方法,把一部分语句抽出来做为一个方法!!
Extract Method 是最常见的重构方法之一。看见一个过长的函数或者一段需要注释才能让人理解用途的代码,就会将这个段代码放进一个独立函数中。
有数个原因造成简短面有良好的命名的函数。首先,如果每个函数的粒度都江堰市很小(finely grained),那么函数之间彼此复用的机会就更大了,其次,这会使高层函数代码读起来就像一系列注释;再者,如果函数都是细粒度,那么函数的覆写(override)也会更容易些.
作法:
- 创造一个新函数,根据这个函数的意图来给它命名
- 仔细检查提炼出的代码,看看其中是否引用了(作用域限于源函数)的变量(包括局部变量和源函数参数)
- 检查是否有(仅仅用于被提炼代码)的临时变量,如果有,在目标函数中将它们声明为临时变量
- 检查被提炼码,看看是否有任何局部变量的值被它改变,如果一个临时变量值被修改了,看看是否可以将被提炼码处理为一个查询(Query),并将结果值给相关变量,
- 将被提炼代码中需要读取的局部变量,当作函数传给目标函数
范例1):无局部变量(No Local Variables)
java 代码
- void printOwing()
- {
- Enumeration e =_orders.elements();
- double outstanding=0.0;
-
- //calculate outstanding
- System.out.println("*******************************");
- System.out.println("********* Customer Owes********");
- System.out.pritnln("*******************************");
-
- //calculate outstanding
- while(e.hasMoreElements()
- {
- Order each=(Order)e.nextElement();
- outstanding +=each.getAmount();
- }
-
- //print details
- System.out.println("name:"+_name);
- System.out.println("amount:"+outstanding);
- }
重构后:
java 代码
- void printOwing(){
- Enumeration e=_orders.elements();
- double outstanding=0.0;
- printBanner();
- //calculate outstanding
- while (e.hasMoreElements())
- {
- Order order=(Order)e.nextElement();
- outstanding +=each.getAmount();
}
-
- //print details
- System.out.println("name:"+_name);
- System.out.println("amount:"+outstanding);
- }
-
- void printBanner(){
- //print banner
- System.out.println("*******************************";
- System.out.println("*********** Customer Owes *****");
- System.out.println("*******************************"):
}
范例2):对局部变量再赋值(Reassigning)
java 代码
- void printOwing(){
- printBanner();
- double outstanding=getOutstanding();
- printDetails(outstanding);
- }
-
- double getOutstanding()
- {
- Enumeration e=_orders.elements();
- while (e.hasMoreElements())
- {
- Order each=(Order)e.nextElement();
- outstanding +=each.getAmount();
- }
- return outstanding;
}
Enumeration 变量 e 只有被提炼码中用到,所以可以将它整个搬到新函数中,double 变量oustanding 在被提炼码内外都被用到,所以我必须让提炼的新函数返回它。
java 代码
- double getOutstanding()
- {
- Enumeration e=_orders.elements();
- double result=0.0;
- while(e.hasMoreElements())
- {
- Order each=(Order)e.nextElement();
- result +=each.getAmount();
- }
- return result;
}
-
最后提炼成:
java 代码
- void print()
- {
- printBanner();
- double outstanding=getOutstanding();
- printDetails(outstanding);
- }
简单吧,呵呵
分享到:
相关推荐
1. 提取函数(Extract Method):将大段代码提炼为一个独立的函数,使得代码更专注,更易于理解。 2. 内联函数(Inline Method):如果一个函数只在一个地方被调用,可以将其内容直接替换到调用位置,减少层次,提高...
重构改善既有代码的设计第2版.pdf 本书主要讨论了如何通过重构来改善既有代码的设计,提高代码的可维护性、可读性和可扩展性。下面是对书中重要的知识点的总结: 1. 重构的定义和重要性:重构是指对既有代码的修改...
例如,重复代码是常见的问题,可以通过提炼函数或应用设计模式如Template Method来消除。过长的函数降低了代码可读性,可以将其拆分为多个独立的功能。过大类的责任不明确,可以拆分为小类。过长的参数列表可以通过...
重构的过程包括了一系列的小步骤,比如:提取函数(Extract Method)、移除重复代码(Remove Duplication)、内联函数(Inline Method)、提炼类(Extract Class)、内联类(Inline Class)等。通过这些具体的重构...
Java 代码重构经验分享 Java 代码重构是指在不改变外部行为的情况下,修改代码的内部结构,以提高代码的可维护性、可读性和可扩展性。本文总结了 Java 代码重构的经验和技术规范,包括重构要求、重构的工作、代码的...
- **提炼函数**:将函数的一部分代码抽取出来,形成一个新的独立函数。 - **搬移字段**:将一个类中的字段移动到另一个类中。 - **封装类**:为类中的字段和方法添加适当的访问控制修饰符。 - **内联方法**:将一个...
这是重构中最基础也是最常用的技术之一。 2. **重命名变量和方法**:选择更具有描述性的名称,可以使代码的意图更加明确,提高代码的可读性。 3. **提取类和接口**:当一个类承担了过多的责任时,可以考虑将其...
3. **应用重构技术**:使用诸如提取方法、提炼类、替换条件为多态等重构技术。例如,当一个方法过长时,可以将其拆分为多个小方法;如果发现多个类有相似的职责,可能需要抽象出一个基类或者接口。 4. **验证结果**...
### 《重构 改善既有代码的设计》之重构,第一个案例详解 #### 一、引言 《重构 改善既有代码的设计》是由Martin Fowler等人撰写的经典之作,旨在教授软件开发者如何通过重构来提高代码质量和可维护性。本书不仅...
此外,重构还涉及到代码的提炼,这包括重拾面向对象的模式、封装新的方法、梳理继承关系、创建公共方法类以及移动方法。 合适的注释也是重构过程中的重要部分。注释应该包含业务和场景的说明、数据模型的说明以及...
经常重构可以帮助代码保持良好的结构和清晰性,保证代码能够被正确地放置在其最恰当的位置。此外,重构可以帮助开发者更容易地理解程序的工作原理,更快地找到潜在的bug,从而提高编码速度。 3. 重构的难点和风险 ...
《重构-改善既有代码的设计》是由Martin Fowler所著的一本软件工程领域的经典书籍,中文版由侯捷翻译,与《设计模式》齐名,被广泛认为是软件开发人员提升编程技能的必读之作。书中展示了超过70种行之有效的重构方法...
《重构改善既有代码的设计》这本书主要介绍如何在现有的代码基础上进行重构以改善设计。重构,即对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。本书以Java语言...