重构
giantmfc123
这个作者很懒,什么都没留下…
展开
-
代码坏味道 之 13 夸夸其谈未来性 speculative generality
《重构:改善既有代码的设计》中提到过一些代码的坏味道,针对这些坏味道,需要进行重构。夸夸其谈未来性 speculative generality问题1:未来可能要做某事,使用很多特殊情况来处理一些非必要的事情 解决方案:某个抽象类其实没有太大的作用,使用collapse hierarchy 解决方案:不必要的委托可以利用inline class 除掉 解决方案:如果函数的某些参数没...原创 2019-04-15 09:20:19 · 434 阅读 · 0 评论 -
c++矩阵库 Eigen 使用说明
1. 简介Eigen是一个C++线性运算的模板库:他可以用来完成矩阵,向量,数值解等相关的运算。Eigen库的使用相当方便,将压缩包中的Eigen文件夹拷贝到项目目录下,直接包含其中的头文件即可使用,省去了使用Cmake进行编译的烦恼。Core #include <Eigen/Core> MatrixandArrayclasses, basic linear ...原创 2019-04-18 09:48:58 · 1964 阅读 · 0 评论 -
《重构:改善既有代码的设计》 在对象之间搬移特性 之 1
《重构:改善既有代码的设计》中提到过很多重构方法,关于在对象之间搬移特性的方法有9种。本文介绍:搬移函数 move method名称:搬移函数 move method 概要:在该函数最常引用的类中建立一个有着类似行为的新函数。将旧函数编程一个单纯的委托函数,或是将旧函数完全移除。 动机:在程序中,有个函数与其所驻类之外的另一个类进行更多交流,调用后者,或者被后者调用。做法: 检...原创 2019-04-18 09:49:17 · 157 阅读 · 0 评论 -
《重构:改善既有代码的设计》 在对象之间搬移特性 之 2
《重构:改善既有代码的设计》中提到过很多重构方法,关于在对象之间搬移特性的方法有9种。本文介绍:搬移字段 move field名称: 搬移字段 move field 概要:在目标类新建一个字段,修改源字段的所有用户,令它们改用新字段。 动机:在程序中,有个字段被其所驻类之外的另一个类更多的用到。做法: 如果字段的访问级别是public,使用encapsulate field将它...原创 2019-04-18 09:49:41 · 256 阅读 · 0 评论 -
《重构:改善既有代码的设计》 在对象之间搬移特性 之 3
《重构:改善既有代码的设计》中提到过很多重构方法,关于在对象之间搬移特性的方法有9种。本文介绍:提炼类 extract class名称: 提炼类 extract class 概要:建立一个新类,将相关的字段和函数从旧类搬移到新类。 动机: 某个类做了应该由两个类做的事。或者开发后期出现的子类化方式,如果你发现子类化只影响类的部分特性,或者发现某些特性需要以一种方式来子类化,某些特性需要以...原创 2019-04-18 09:49:58 · 145 阅读 · 0 评论 -
《重构:改善既有代码的设计》代码实践 之 第七章(一部分)
在对象之间搬移特性Move field: 搬移字段 move method: 搬移方法 extract class: 类由于承担过多责任而变的臃肿不堪,将一部分责任分离出去 inline class:类太"不负责任", 将它融入另一个类中 hide delegate:一个类使用了另一个类,将这种关系隐藏起来 remove middle man: 解决隐藏委托而导致拥有者的接口经常变...原创 2019-04-18 09:50:15 · 212 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 13
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有16种。本文介绍:以类取代类型码 replace type code with class名称:以类取代类型码 replace type code with class 概要:类中有一个数值类型码,但它并不影响类的行为,以一个新的类替换改数值类型码 动机:类型码作为函数参数,编译器无法进行类型检验。做法: ...原创 2019-05-01 23:09:34 · 184 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 14
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有16种。本文介绍:以子类取代类型码 replace type code with subclasses名称:以子类取代类型码 replace type code with subclasses 概要:有一个不可变的类型码,它会影响类的行为。以子类取代这个类型码 动机:如果类型码不会影响宿主类的行为,可以使用repl...原创 2019-05-01 23:10:07 · 251 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 15
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有16种。本文介绍:以state/strategy取代类型码 replace type code with state/strategy名称:以state/strategy取代类型码 replace type code with state/strategy 概要:有一个类型码,会影响类的行为,但你无法通过继承手法消除...原创 2019-05-01 23:10:29 · 284 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织函数的使用方法 之 9
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织函数的方法有9种。本文介绍:替换算法 substitute algorithm名称:替换算法 substitute algorithm 概要:将函数本体替换为另一个算法 动机:想要把某个算法替换为另一个更清晰的算法 做法: 准备好另一个(替换用)的算法,让它通过编译 针对现有测试,执行上述新算法。如果结果与原本结果相...原创 2019-04-18 09:44:43 · 136 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织函数的使用方法 之 8
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织函数的方法有9种。本文介绍:以函数对象取代函数 replace method with method object名称:以函数对象取代函数 replace method with method object 概要:有一个大型函数,其中对局部变量的使用,使你无法采用extract method。将这个函数放进一个单独对象中,局部...原创 2019-04-18 09:44:28 · 113 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织函数的使用方法 之 7
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织函数的方法有9种。本文介绍:移除对参数的赋值 remove assignments to parameters名称:移除对参数的赋值 remove assignments to parameters 概要:代码对一个参数(函数参数)进行赋值,以一个临时变量取代该参数的位置。 动机:传值不会有太大影响。如果传入指针,而且不小心...原创 2019-04-18 09:44:11 · 148 阅读 · 0 评论 -
代码坏味道 之 14 令人迷惑的暂时字段 temporary field
《重构:改善既有代码的设计》中提到过一些代码的坏味道,针对这些坏味道,需要进行重构。令人迷惑的暂时字段 temporary field问题1:某个实例变量仅为某种特定情况而设 解决方案:使用extract class为其创造一个家,把所有和这个变量相关的代码都放进这个家。 解决方案:再变量不合法的情况下,使用introduce null object 创建一个null 对象,从而避免写...原创 2019-04-15 09:20:42 · 612 阅读 · 0 评论 -
代码坏味道 之 15 过度耦合的消息链 message chains
《重构:改善既有代码的设计》中提到过一些代码的坏味道,针对这些坏味道,需要进行重构。过度耦合的消息链 message chains问题1:用户向一个对象请求另一个对象,然后再向后者请求另一个对象,然后再请求另一个对象。 解决方案:使用 hide delegate。先观察消息链最终得到的对象是用来干什么的。看看能否以extract method 把使用该对象的代码提炼到一个独立函数中,再运...原创 2019-04-15 09:21:02 · 1819 阅读 · 0 评论 -
代码坏味道 之 16 中间人 middle man
《重构:改善既有代码的设计》中提到过一些代码的坏味道,针对这些坏味道,需要进行重构。中间人 middle man问题1:某个类接口有一般的函数都委托给其他类,这样就过度运用委托了 解决方案:使用remove middle man,直接和真正负责的对象打交道 解决方案:如果这样“不干实事”的函数只有少数几个,可以运用replace delegation with inheritance把...原创 2019-04-15 09:21:54 · 799 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 3
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍:将值对象改为引用对象 change value to reference名称:将值对象改为引用对象 change value to reference 概要:从一个类衍生出许多彼此相等的实例,希望将它们替换为同一个对象。将这个值对象变成引用对象 动机: 你希望给这个对象加入一些可修改数据,并确保对任...原创 2019-04-22 18:52:49 · 139 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 4
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍:将引用对象改为值对象 change reference to value名称:将引用对象改为值对象 change reference to value 概要:有一个引用对象,很小且不可变,而且不易管理。将它变成一个值对象 动机: 无论何时,只要调用同一对象的同一个查询函数,都应该得到同样的结果。做...原创 2019-04-22 18:53:07 · 169 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 5
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍:以对象取代数组 replace array with object名称:以对象取代数组 replace array with object 概要:有一个数组,其中的元素各自代表不同的东西。以对象替换数组,对于数组中的每个元素,以一个字段来表示。 动机: 一个数组中容纳了多种不同对象,很难记忆某几位是...原创 2019-04-22 18:53:28 · 124 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织函数的使用方法 之 5
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织函数的方法有9种。本文介绍:引入解释性变量 introduce explaining value名称:引入解释性变量 introduce explaining value 概要:将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途 动机:表达式有时候非常复杂且难以阅读,运用变量来解释对应条件子句...原创 2019-04-18 09:43:35 · 198 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织函数的使用方法 之 6
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织函数的方法有9种。本文介绍:分解临时变量 split temporary variable名称:分解临时变量 split temporary variable 概要:有个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果。针对每次赋值,创造一个独立和对应的临时变量 动机:该变量承担了一个以上的责任,会令代码阅读...原创 2019-04-18 09:43:52 · 107 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 16
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有16种。本文介绍:以字段取代子类 replace subclass with fields名称:以字段取代子类 replace subclass with fields 概要:各个子类的唯一区别只在“返回常量数据”的函数身上。修改这些函数,使它们返回超类中的某个(新增)字段,然后销毁子类 动机:子类中只有常量函数,...原创 2019-05-01 23:10:53 · 232 阅读 · 0 评论 -
《重构:改善既有代码的设计》 简化条件表达式 之 1 分解条件表达式 decompose conditional
《重构:改善既有代码的设计》中提到过很多重构方法,关于简化条件表达式的方法有8种。本文介绍:分解条件表达式 decompose conditional名称:分解条件表达式 decompose conditional 概要:有一个复杂的条件(if-then-else)语句,从if, then,else三个段落中分别提炼出独立函数 动机: 大型函数自身会使代码的可读性下降做法: 将if段...原创 2019-05-01 23:11:54 · 253 阅读 · 0 评论 -
《重构:改善既有代码的设计》 简化条件表达式 之 2 合并条件表达式 consolidate conditional expression
《重构:改善既有代码的设计》中提到过很多重构方法,关于简化条件表达式的方法有8种。本文介绍:合并条件表达式 consolidate conditional expression名称:合并条件表达式 consolidate conditional expression 概要:一系列条件测试,都得到相同结果。将这些测试合并为一个条件表达式,并将这个条件表达式提炼成为一个独立函数 动机: 一串...原创 2019-05-01 23:12:20 · 295 阅读 · 0 评论 -
《重构:改善既有代码的设计》 在对象之间搬移特性 之 5
《重构:改善既有代码的设计》中提到过很多重构方法,关于在对象之间搬移特性的方法有8种。本文介绍:隐藏“委托关系” hide delegate名称: 隐藏“委托关系” hide delegate 概要:客户通过一个委托来调用另一个对象。在服务类上建立 客户所需的所有函数,用以隐藏委托关系。 动机:每个对象都应该尽量少的了解系统的其他部分做法: 对于每一个委托关系中的函数,在服务...原创 2019-04-19 00:44:17 · 153 阅读 · 0 评论 -
《重构:改善既有代码的设计》 在对象之间搬移特性 之 6
《重构:改善既有代码的设计》中提到过很多重构方法,关于在对象之间搬移特性的方法有8种。本文介绍:移除中间人 remove middle man名称: 移除中间人 remove middle man 概要:某个类做了过多的简单委托动作,让客户直接调用受托类 动机:每当客户使用受托类的 新特性,就要在服务端增加一个简单委托函数,当受托类越来越多的时候,就会导致服务类完全变成了一个“中间人...原创 2019-04-19 00:44:33 · 110 阅读 · 0 评论 -
《重构:改善既有代码的设计》 在对象之间搬移特性 之 7
《重构:改善既有代码的设计》中提到过很多重构方法,关于在对象之间搬移特性的方法有8种。本文介绍:引入外加函数 introduce foreign method名称:引入外加函数 introduce foreign method 概要:在客户类中建立一个函数,并以第一参数形式传入一个服务类实例 动机:如果正在使用一个类,为你提供了需要的所有服务。而你想要增加新的服务,这个类却无法供应。你...原创 2019-04-19 00:44:51 · 122 阅读 · 0 评论 -
《重构:改善既有代码的设计》 在对象之间搬移特性 之 8
《重构:改善既有代码的设计》中提到过很多重构方法,关于在对象之间搬移特性的方法有8种。本文介绍:引入本地扩展 introduce local extension名称:引入本地扩展 introduce local extension 概要:需要为服务类提供一些额外函数,但你无法修改这个类。建立一个新类,使它包含这些额外函数。让这个扩展品成为源类的子类或包装类。 动机:如果正在使用一个类,为...原创 2019-04-19 00:45:06 · 131 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 12
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有16种。本文介绍:以数据类取代记录 replace record with data class名称:以数据类取代记录 replace record with data class 概要:为记录机构创建一个“哑”数据对象 动机:比如处理从数据库读出的记录,直接访问会造成数据暴露。有必要创建一个接口类,用来专门处理这...原创 2019-04-29 08:26:10 · 130 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 11
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有16种。本文介绍:封装集合 encapsulate collection名称:封装集合 encapsulate collection 概要:有个函数返回一个集合。让这个函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数 动机:对用户暴露过多对象内部数据结构的信息。不应该额外i这整个集合提供一个设...原创 2019-04-29 08:26:27 · 143 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 2
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍:以对象取代数据值 replace data value with object名称:以对象取代数据值 replace data value with object 概要:有一个数据项,需要与其他数据和行为一起使用才有意义。将数据项变成对象 动机: 开发初期,以简单的数据线表示简单情况。比如一个字符串...原创 2019-04-19 23:23:28 · 224 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 1
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍:自封装字段 self encapsulate field名称:自封装字段 self encapsulate field 概要:为该字段建立取值/设值函数,并且只以这些函数来访问字段 动机: 直接访问一个字段,但与字段之间的耦合关系逐渐变的笨拙。完成自我封装后,可以在子类中根据自己的需要随意覆写取值/...原创 2019-04-20 08:43:06 · 585 阅读 · 0 评论 -
《重构:改善既有代码的设计》 在对象之间搬移特性 之 4
《重构:改善既有代码的设计》中提到过很多重构方法,关于在对象之间搬移特性的方法有8种。本文介绍:将类内联化 inline class名称: 将类内联化 inline class 概要:某个类没有做太多的事情,将这个类的所有特性搬移到另一个类中,然后移除原类。 动机: inline class 正好与extract class相反。如果一个类不再承担足够责任,不再由单独存在的理由。挑选这个...原创 2019-04-19 00:44:01 · 96 阅读 · 0 评论 -
《重构:改善既有代码的设计》代码实践 之 第七章
在对象之间搬移特性Move field: 搬移字段 move method: 搬移方法 extract class: 类由于承担过多责任而变的臃肿不堪,将一部分责任分离出去 inline class:类太"不负责任", 将它融入另一个类中 hide delegate:一个类使用了另一个类,将这种关系隐藏起来 remove middle man: 解决隐藏委托而导致拥有者的接口经常变...原创 2019-04-19 00:43:45 · 193 阅读 · 0 评论 -
《重构:改善既有代码的设计》 简化条件表达式 之 6 以多态取代条件表达式 replace conditional with polymorphism
《重构:改善既有代码的设计》中提到过很多重构方法,关于简化条件表达式的方法有8种。本文介绍:以多态取代条件表达式 replace conditional with polymorphism名称:以多态取代条件表达式 replace conditional with polymorphism 概要:有个条件表达式,它根据对象类型的不同而选择不同的行为。将这个条件表达式的每个分支放进一个子类内...原创 2019-05-02 19:11:23 · 489 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 6
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍:复制“被监控数据” dumplicate Observed Data名称:复制“被监控数据” dumplicate Observed Data 概要:有一些领域数据置身于GUI控件中,而领域函数需要访问这些数据 动机: 分层良好的系统,应该将处理用户界面和处理业务逻辑的代码分开。好处是 使用不同...原创 2019-04-28 08:57:07 · 420 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 7
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍:将对象之间的关联由单向改为双向 change unidirectional association to bidirectional名称:将对象之间的关联由单向改为双向 change unidirectional association to bidirectional 概要:两个类都需要使用对方特性...原创 2019-04-28 08:57:25 · 274 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 8
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有16种。本文介绍:将对象之间的关联由双向改为单向 change bidirectional association to unidirectional名称:将对象之间的关联由双向改为单向 change bidirectional association to unidirectional 概要:两个类之间有双向关联,...原创 2019-04-28 08:57:53 · 927 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 9
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有16种。本文介绍:以字面常量取代魔法数 replace magic number with symbolic constant名称:以字面常量取代魔法数 replace magic number with symbolic constant 概要:有一个字面数值,并带有特别含义。创造一个常量,根据其意义为它命名,并将...原创 2019-04-28 08:58:46 · 127 阅读 · 0 评论 -
《重构:改善既有代码的设计》 重新组织数据 之 10
《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有16种。本文介绍:封装字段 encapsulate field名称:封装字段 encapsulate field 概要:类中存在一个public字段,将它声明为private,并提供相应的访问函数 动机:数据隐藏做法: 为public字段提供取值/设值函数 找到这个类以外使用该字段的所有地点。如果客户只是读...原创 2019-04-28 08:59:05 · 255 阅读 · 0 评论 -
《重构:改善既有代码的设计》 简化条件表达式 之 3 合并重复的条件片段 consolidate duplicate conditional fragments
《重构:改善既有代码的设计》中提到过很多重构方法,关于简化条件表达式的方法有8种。本文介绍:合并重复的条件片段 consolidate duplicate conditional fragments名称:合并重复的条件片段 consolidate duplicate conditional fragments 概要:在条件表达式的每个分支上有着相同的一段代码,将这段重复代码搬移到条件表达式...原创 2019-05-02 19:09:50 · 1660 阅读 · 0 评论