随笔分类 -  重构改善代码结构

上一页 1 2 3
过长参数化---Preserve Whole Object
摘要:你从某个对象中取出若干值,将它们作为某一次函数调用时的参数。 动机: 有时候,你会将来自同一对象的若干项数据作为参数,传递给某个函数。 这样做的问题在于:万一将来被调用函数需要新的数据项,你就必须查找并修改对此函数的所有调用。 如果你把这些数据所属的整个对象传给函数,可以避免这种尴尬的处境,因为被调 阅读全文
posted @ 2018-02-06 14:25 Sharpest
过长参数化--Introduce Parameter Object(引入参数对象)
摘要:某些参数总是很自然地同时出现。 以一个对象取代这些参数。 动机(Motivation) 你常会看到特定的一组参数总是一起被传递。可能有好几个函数都使用这一组参数,这些函数可能隶属同一个class,也可能隶属不同的classes 。这样一组参数就是所谓的Date Clump (数据泥团)」,我们可以运 阅读全文
posted @ 2018-02-06 14:16 Sharpest
过长的参数化--Replace Parameter with Method(以函数取代参数)
摘要:对象调用某个函数,并将所得结果作为参数,传递给另一个函数。而接受该参数的函数也可以(也有能力)调用前一个函数。 让参数接受者去除该项参数,并直接调用前一个函数。 int basePrice = _quantity * _itemPrice; discountLevel = getDiscountLe 阅读全文
posted @ 2018-02-06 14:11 Sharpest
过大的类---Replace Data Value with Object(以对象取代数据值)
摘要:你有一笔数据项(data item),需要额外的数据和行为。 将这笔数据项变成一个对象。 class Order... private string customer; ==> class Order... private Customer _customer; class Customer...  阅读全文
posted @ 2018-02-06 13:58 Sharpest
过大的类--Extrace Interface
摘要:若干客户使用class 接口中的同一子集;或者,两个classes 的接口有部分相同。 将相同的子集提炼到一个独立接口中。 动机(Motivation) classes 之间彼此互用的方式有若干种。 「使用一个class 」通常意味覆盖该class 的所有责任区( whole area of res 阅读全文
posted @ 2018-02-06 11:05 Sharpest
过大的类---Extract Subclass (提炼子类)
摘要:class 中的某些特性(features)只被某些(而非全部)实体(instances)用到。 新建一个subclass ,将上面所说的那一部分特性移到subclass 中。 动机(Motivation) 使用Extract Subclass 的主要动机是:你发现class 中的某些行为只被一部分 阅读全文
posted @ 2018-02-06 10:55 Sharpest
过大的类--- Extract Class
摘要:某个类做了应该由2个类做的事。建立一个新类,将相关的字段和函数从旧类搬移到新类。 动机:一个类应该是一个清楚地抽象,处理一些明确的责任。但是在实际工作中,类会不断成长扩展。你会在这儿加入一些功能,在哪加入一些数据。给某个类添加一项新责任时,你会觉得不值得为这项责任分离出一个单独的类。于是,随着责任不 阅读全文
posted @ 2018-02-06 10:48 Sharpest
过大的类---过大的类(Large Class)
摘要:如果想利用单个类做太多的事,其内往往就会出现太多实例变量。这样 重复代码(Duplicated Code)就接踵而至了。 运用Extract Class (提炼类)将几个变量一起提炼到新类里。 提炼类时应该选择类内彼此相关的变量,将它们放在一起。 通常类内的数个变量有相同的前缀或字尾,这就意味有机会 阅读全文
posted @ 2018-02-06 10:45 Sharpest
过长的函数--Decompose Conditional(分解条件表达式)
摘要:你有一个复杂的条件(if-then-else)语句。 从if、then、else三个段落中分别提炼出独立函数。 动机 程序之中,复杂的条件逻辑是最常导致复杂度上升的地点之一。 你必须编写代码来检查不同的条件分支、根据不同的分支做不同的事,然后,你很快就会得到一个相当长的函数。 大型函数自身就会使代码 阅读全文
posted @ 2018-02-06 10:24 Sharpest
过长的函数--以函数对象取代函数(Replace Method with Method Object)
摘要:当对局部变量的引用无法使用Extract Method的时候,可以考虑将这个函数放入到一个单独的对象中去,如此一来,局部变量就变成了对象的字段,然后就可以在同一对象中将这个大型函数分解成小型函数。 如:在Order类中: [java] view plain copy package com.xuze 阅读全文
posted @ 2018-02-06 10:15 Sharpest
过长的函数--Replace Temp With Query(以查询取代临时变量)
摘要:double basePrice = _quantity * _itemPrice;if(basePrice > 1000) return basePrice * 0.95;else return basePrice * 0.98; ==> if(basePrice() > 1000) return 阅读全文
posted @ 2018-02-06 10:09 Sharpest
过长的函数--提炼函数(Extract method)
摘要:在编程中,比较忌讳的一件事情就是长函数。因为长函数代表了你这段代码不能很好的复用以及内部可能出现很多别的地方的重复代码,而且这段长函数内部的处理逻辑你也不能很好的看清楚。因此,今天重构第一个手法就是处理长函数--Extract Method,抽取成一个独立的小函数。 我个人来说也很喜欢短小函数,因为 阅读全文
posted @ 2018-02-06 10:06 Sharpest
重复代码--Form Template Method (塑造模板函数)
摘要:你有一些子类,其中相应的某些函数以相同的顺序执行类似的操作,但各个操作的细节不同。将这些操作分别放进独立的函数中,并保持它们都有相同的签名,于是原函数也就变得相同了,然后将原函数上移至超类。 动机:继承是避免重复行为的一个强大工具。无论何时,只要你看见2个子类之中有类似的函数,就可以把它们提升到超类 阅读全文
posted @ 2018-02-06 09:55 Sharpest
重复代码--Pull Up Method(函数上移)
摘要:有些函数,在各个subclass 中产生完全相同的结果。 将该函数移至superclass。 动机(Motivation) 避免「行为重复」是很重要的。尽管「重复的两个函数」也可以各自工作得很好, 但「重复」自身会成为错误的滋生地,此外别无价值。无论何时,只要系统之内出现重复,你就会面临「修改其中一 阅读全文
posted @ 2018-02-06 09:49 Sharpest
重复代码--Extract Class
摘要:某个类做了应该由2个类做的事。建立一个新类,将相关的字段和函数从旧类搬移到新类。 动机:一个类应该是一个清楚地抽象,处理一些明确的责任。但是在实际工作中,类会不断成长扩展。你会在这儿加入一些功能,在哪加入一些数据。给某个类添加一项新责任时,你会觉得不值得为这项责任分离出一个单独的类。于是,随着责任不 阅读全文
posted @ 2018-02-06 09:40 Sharpest
重复代码---提炼函数(Extract method)
摘要:1、Extract Method:提炼方法 将有些代码单独提取出来放入到一个独立的函数中,并让函数名称来解释该函数的用途。 [java] view plain copy public void printOwing(double amount) { printBanner(); System.out 阅读全文
posted @ 2018-02-06 09:33 Sharpest
1.Decompose Conditional(分解条件式 )
摘要:有一个复杂的(if-then-else)语句。 从if-then-else三个段落中分别提炼出独立的函数 f(date.before(SUMMER_START) || date.after(SUMMER_END)) charge=quantity*_winterRate+_winterService 阅读全文
posted @ 2016-04-28 10:56 Sharpest
重构
摘要:第三章 代码的坏味道 3.1 Duplicated Code重复代码 3.1.1 最单纯的Duplicated Code就是“同一个类的两个函数含有相同的表达式”,这时你需要做的就是采用Extract Method(110)提炼重复的代码,然后让这两个地点都调用被提炼出来的那一段代码 Extract 阅读全文
posted @ 2016-02-24 21:24 Sharpest

上一页 1 2 3