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

上一页 1 2 3 下一页
平行继承体系---Move Method(搬移函数)
摘要:发现:程序中有个函数与其所驻类之外的另一个类进行更多交流。 解决:在该函数最常引用的类中建立一个有着类似行为的新函数。将旧函数变成一个单纯的委托函数,或是将旧函数完全移除。 动机 “搬移函数”是重构理论中比较重要的特性之一。一般情况下,如果一个类有太多的行为,或者如果一个类与另一个类有太多合作而形成 阅读全文
posted @ 2018-02-08 14:30 Sharpest
平行继承体系(Parallel Inheritance Hierarchies)
摘要:平行继承体系其实是散弹式修改(Shotgun Surgery)的特殊情况。在这种情况下,每当你为某个类增加1个子类,必须也为另一个类相应增加1个子类。如果你发现某个继承体系的类名前缀和另一个继承体系的类名前缀完全相同,便是闻到了这种坏味道。 消除这种重复性的一般策略是:让一个继承体系的实例引用另一个 阅读全文
posted @ 2018-02-08 14:11 Sharpest
冗赘类---Inline Class(将类内联化)
摘要:你的某个class没有做太多事情(没有承担足够责任)。 将class的所有特性搬移到另一个class中,然后移除原class。 class Person... private string _name; public string getTelephoneNumber(); private Tele 阅读全文
posted @ 2018-02-08 14:06 Sharpest
冗 贅类--Collapse Hierarchy(折叠继承关系)
摘要:superclass 和subclass 之间无太大区别。 将它们合为一体。 动机(Motivation) 如果你曾经编写过继承体系,你就会知道,继承体系很容易变得过分复杂。所谓重构继承体系,往往是将函数和值域在体系中上下移动。完成这些动作后,你 很可能发现某个subclass 并未带来该有的价值, 阅读全文
posted @ 2018-02-08 14:00 Sharpest
switch惊悚--introduce Null object (引入null对象)
摘要:需要再三检查某物是否为null value。 将null value (无效值)替换为 null object(无效对象)。 if (customer == null) plan = BillingPlan.basic();else plan = customer.getPlan(); ==〉 动机 阅读全文
posted @ 2018-02-08 11:18 Sharpest
switch惊悚现身---Replace Conditional with Polymorphism(以多态取代条件式)
摘要:你手上有个条件式,它根据对象型别的不同而选择不同的行为。 将这个条件式的每个分支放进一个subclass 内的覆写函数中,然后将原始函数声明为抽象函数(abstract method)。 double getSpeed() { switch (_type) { case EUROPEAN: retu 阅读全文
posted @ 2018-02-08 10:36 Sharpest
switch 惊悚现身(Switch Statements)
摘要:面向对象程序的一个最明显特征就是:少用switch或(case)语句。 从本质上说,switch语句的问题在于重复。 你常会发现switch语句散布于不同地点。如果要为它添加一个新的case子句,就必须找到所有switch语句并修改它们。 面向对象中的多态概念可为此带来优雅的解决办法。 大多数时候, 阅读全文
posted @ 2018-02-07 19:29 Sharpest
基本类型偏执---Replace Array with Object(以对象取代数组)
摘要:你有一个数组(array),其中的元素各自代表不同的东西。 以对象替换数组。对于数组中的每个元素,以一个值域表示之。 String[] row = new String[3]; row [0] = "Liverpool"; row [1] = "15"; Performance row = new 阅读全文
posted @ 2018-02-07 19:04 Sharpest
基本类型偏执--Replace Type Code with State/Strategy(以State/Strategy取代型别码)
摘要:你有一个type code ,它会影响class 的行为,但你无法使用subclassing。 以state object (专门用来描述状态的对象)取代type code 。 动机(Motivation) 本项重构和Replace Type Code with Subclasses 很相似,但如果 阅读全文
posted @ 2018-02-07 18:42 Sharpest
基本类型偏执---Replace Type Code with Subclasses(以子类取代型别码)
摘要:你有一个不可变得type code,它会影响类的行为。 以一个子类取代这个type code。 动机 如果一个type code不会影响行为,你可以使用Replace Type Code with Class;但是,如果一个type code会影响行为,最好的办法就是借助多态来处理变化的行为。 一般 阅读全文
posted @ 2018-02-07 17:27 Sharpest
基本类型偏执---Replace Type Code with Class(以类取代型别码)
摘要:class 中有一个数值型别码,但它不影响class的行为 以一个新的class替换该数值型别码。 class Person ...public static final int O = 0;public static final int A = 1;public static final int 阅读全文
posted @ 2018-02-07 12:13 Sharpest
基本类型偏执---Replace Data Value with Object(以对象取代数据值)
摘要:你有一笔数据项(data item),需要额外的数据和行为。 将这笔数据项变成一个对象。 class Order... private string customer; ==> class Order... private Customer _customer; class Customer...  阅读全文
posted @ 2018-02-07 10:37 Sharpest
基本类型偏执(Primitive Obsession)
摘要:对象技术的新手通常不愿意在小任务上运用小对象—像是结合数值和币种的money类,由一个起始值和结束值组成的range类等。你可以使用 Replace Data Value with Object (以对象取代数据值)将原本单独存在的数据值替换为对象。如果想要替换的数据值是类型码,而它并不影响行为,则 阅读全文
posted @ 2018-02-07 10:35 Sharpest
数据泥团(Data Clumps)-Extract Class,Introduce Paramter Object,Preserve Whole Object
摘要:常常可以在很多地方看到相同的3、4项数据:2个类中相同的字段、许多函数签名中相同的参数。这些总是绑在一起出现的数据真应该拥有属于它们自己的对象。首先找出这些数据以字段形式出现的地方,运用Extract Class (提炼类)将它们提炼到一个独立对象中。然后将注意力转移到函数签名上,运用Introdu 阅读全文
posted @ 2018-02-06 16:06 Sharpest
shotgun surgery(散弹式修改)
摘要:如果没遇到某种变化,都必须在许多不同的类内做出许多小修改,你所面临的坏味道就是shotgun surgery。 应该使用move method和move field把所有需要修改的代码放进同一个类。如果眼下没有合适的类可以安置这些代码,就创造一个。通常可以运用inline class把一系列相关行为 阅读全文
posted @ 2018-02-06 15:30 Sharpest
散弹式修改--Inline Class(将类内联化)
摘要:你的某个class没有做太多事情(没有承担足够责任)。 将class的所有特性搬移到另一个class中,然后移除原class。 class Person... private string _name; public string getTelephoneNumber(); private Tele 阅读全文
posted @ 2018-02-06 15:29 Sharpest
依恋情结--提取方法(Extract Method)
摘要:提取方法(Extract Method)是最常用的重构手法之一。当看到一个方法过长或者方法很难让人理解其意图的时候,这时候就可以用提取方法这种重构手法。 下面是我学习这个重构手法的笔记: 提取方法看起来好像仅仅是将被提取方法中的一段代码,放到目标方法中。其实,当方法足够复杂的时候,提取方法也会变得复 阅读全文
posted @ 2018-02-06 15:08 Sharpest
依恋情结--Move Field
摘要:在类与类之间搬移状态和行为,是重构过程中必不可少的步骤。很有可能在你现在觉得正常的类,等你到了下个礼拜你就会觉得不合适。或者你在下个礼拜创建了一个新的类并且你需要讲现在类的部分字段和行为移动到这个新类中。如果你发现在一个类中的某个字段,更多的被别的类的函数所使用,包括设值set和取值get函数锁取用 阅读全文
posted @ 2018-02-06 15:02 Sharpest
依恋情结----Move Method
摘要:毋容置疑,搬移方法(Move Method)应该是最常用的重构手段之一,正因为太常用而且较为简单,以至于很多人并不认为它是一种很有价值的重构,但事实并非如此,在最初的代码诞生之后,有些方法可能会被放在一些不合适的地方,例如,一个方法被其他类使用比在它所在的类中的使用还要频繁或者一个方法本身就不应该放 阅读全文
posted @ 2018-02-06 14:40 Sharpest
发散式变化(DivergentChange)
摘要:发散式变化(Divergent Change) 发散式变化(Divergent Change) 类似于 霰弹式修改(Shotgun Surgery) ,但实际上完全不同。发散式变化(Divergent Change) 在一个类中修改多处。霰弹式修改(Shotgun Surgery)指的是同时对多个类 阅读全文
posted @ 2018-02-06 14:32 Sharpest

上一页 1 2 3 下一页