Divergent Change(发散式变化)---要重构的信号

当你看着一个类说,呃,如果新加入一个数据库,我必须修改这三个函数;如果新出现一种金融工具,我必须修改这四个函数。那么,此时也许将这个类分成两个会更好,这么一来每个对象就可以只因一种变化而需要修改。

上述特征的名称叫做:Divergent Change。它表示,某个类经常因为不同的原因在不同的方向上发生变化。比如,上述的类,有两个原因,会导致这个类在两个不同的方向上发生变化。

我们认为,一个类,只会因为一种原因而导致变化,这才是好的。如果,这个类,会因为多种原因发生变化,那么,我们就要重构这个类。找出这个类中某种原因导致的所有变化,将这部分内容提炼到一个新的类中,使用Extract Class手法,然后,新的类将只会因为一种原因而导致变化。

比如,上述的类,会因为两个不同的原因,在不同的方向上发生变化,那么,就可以提炼其中一种原因导致变化的相关代码,作为新的类。比如,新加入一个数据库,导致的变化,这部分代码提炼到新类A中。这样,新类只会因为数据库的原因而发生变化。

例子:待定。

时间: 2024-11-06 18:06:05

Divergent Change(发散式变化)---要重构的信号的相关文章

Divergent Change & Shotgun Surgery

[Divergent Change] [Shortgun Surgery]

CSS鼠标点击式变化图片透明度

今天分享前端代码主题:jequery控制css图片透明度 很多时候在网站图片处理上需要实现一些辅助效果,比如鼠标在图片上滑动时或点击时改变图片颜色(变灰或者其他),其实一个简单的办法就是改变图片css透明度属性. 如何改变呢?一种是纯css,一种使用jquery或者javascript代码控制.第一种使用:hover伪类选择器,本示例使用第二种. 先看最后效果: 第一步:放置图片 <ul id="test">        <li>            <

重复代码Duplicated Code---要重构的信号

什么时候需要重构,当你在项目代码里面嗅到这个味道的时候,就要进行重构. 首个介绍的味道是重复代码的味道. 它表现出来的特征是这些: 1.一个类里面,两个函数中,含有相同的代码,类似的代码:或者三个函数中,含有相同的代码,类似的代码.这是重复代码的味道. 2.两个互为兄弟的子类内含有相同的表达式.这也是重复代码的味道. 3.两个不相关的类,出现了重复代码.这也是重复代码的味道. 如何处理,如何重构 1.对于两个函数,出现重复代码,使用Extract Method方法.把某段代码组织到一个新的函数中

过长的函数---要重构的信号

这个,我经常发现做开发的同事的代码,出现这个问题. "但是让小函数容易理解的真正关键在于一个好名字.如果你能给函数起个好名字,读者就可以通过名字了解函数的作用,根本不必去看其中写了些什么.“-----------起个好名字,看名字知道函数的作用.在需要的时候,比如,调试,检查Bug,这时候,才需要查看. ”最终的效果是:你应该更积极地分解函数.我们遵循这样一条原则:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)命名.我们可以对一组甚至短

Large Class--过大的类--要重构的信号

如果想利用单个类做太多事情,其内往往就会出现太多实例变量.一旦如此,Duplicated Code也就接踵而至. 解决方法: 1.将类内彼此相关的变量,将它们放在一起.使用Extract Class手法,将彼此相关的变量提炼到新的类. 2.如果1中的新类适合作为一个子类,那么可以使用Extract Subclass手法. 11.对于太多代码的处理办法,分解函数,将大函数分解成若干小函数,这样可以消除重复代码.相关的函数,可以跟着变量,一起被提炼到一个新的类中去,使用Extract Class手法

重构摘要3_代码的坏味道

如果尿布臭了,就换掉它. 1.Duplicated Code 重复代码 Extract Method Pull Up Method Form Template Method --> Template Method 模式 Substitute Algorithm --> 函数算法替代 2.Long Method 过长的函数 "间接层"所带来的全部利益--解释能力.共享能力.选择能力--都是有小函数支持的. 真正关键在于一个好名字. 每当感觉需要以注释来说明点什么的时候,我们就

转:Bad Smell重构和设计的标准

Bad Smell重构和设计的标准.——与其无尽的等待完美的设计,不如立刻着手实现可行的设计,然后再在设计出现臭味的时候重构实现! 食品有做得好不好之分.其中一个重要的指标就是保质期.好的食品,保质期就长,坏的食品保质期就短.对于代码来说也一样.也有一个保质能力的问题.好的代码,入口芬芳.坏的代码早早就变质了,而且随着时间的推移越来越臭,直到最后,我们只好把它扔掉,虽然它也曾经是我们花钱买来的…… 比如说,我们接到一个项目,我们经过思考,获得了一个可行的设计方案,然后着手实现.此时,可能有一个小

[重构]读书笔记

如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性. 没个傻瓜都能够写出计算机能够理解的代码,但是唯有写出人类能够理解的代码的程序员,才是优秀的程序员. 第一章 重构步骤 1. 为即将修改的代码建立一组可靠的测试环境.测试机制再重构领域的地位很重要. 2. 分解并重组 2.1 extract 2.2 move 2.3 replace temp with query 2.4 State模式 Gang of four

java代码重构的方法学习

2,8阅读 第一章  第一个案例 在此案例中使用了, 方法的提取(extract method),方法的移动(move method),临时变量的清除,变量及函数名重构,switch类型重构(replace type code with state/strategy)等. 重构使得代码功能更加好的被复用,偏于维护和修改. 注意: switch语句的属性尽量不要是另一个对象的数据,最好在自己的数据基础上进行 第二章 重构原则 何为重构:(名词)不改变软件可观察行为的前提下,提供可理解性,降低其修改