随笔分类 - Refactoring
摘要:记得我第一个独立完成的程序是一个课程表软件 (左图), 用 VB.NET 写的, 花了三天功夫写了 2000 多行, 当时一共写了近 10 个界面用于包括设置一个星期中每天的课程还有其它一些杂七杂八的内容. 当时我也知道 "重复" 的代码很多, 但只想着 "能运行就好了", 于是还光明正大的把一大块代码复制到另外几个模板里. 如果想对这样的代码做点优化的话, 这时不应该是重构, 而应该重写...
阅读全文
摘要:类与类之间经常会相互调用, 比如 ClassA 的某个函数里需要 ClassB 里的某个值域或者某个函数的返回值, 因此我将整个 ClassB 作为参数传递给 ClassA 的这个函数, 这意味着 ClassA 的这个函数能够调用 ClassB 里所有的功能, 可不可以给 ClassA 的这个函数划定一个特定的职能呢? 让它只能做某些事情, 而避免其它 "越权行为". 有句话常被人说起 —— 使用接口来降低耦合性, 这就是 Extract Interface 的功劳. 这条重构手段经常被使用到, 主要解决类对另一个类的依赖问题, 降低了耦合性...
阅读全文
摘要:"令函数携带参数" 并不是简单的让你在函数里加上参数, 如果函数里需要某个参数, 我们谁都会加上它. 你可能发现这样的几个函数: 它们做着类似的事情, 只是因为极少的几个值导致函数的策略不同, 这时可以使用 Parameterize Method 消除函数中那些重复的代码了, 而且可以用这个参数处理其它更多变化的情况...
阅读全文
摘要:"复杂的条件逻辑" 是导致复杂性上升最常见的地方, "条件表达式中堆积的计算过程", "条件式表达得不简洁"等等都是造成复杂的原因. Decompose Conditional 用于将这些复杂的元素从条件表达式中分离出去, 仅在条件表达式中调用简洁的函数. 这样做带来的直接好处是减少重复, 而且代码的可读性提高了...
阅读全文
摘要:大部分类中都会有一些值域, 随之还会有一些方法使用到了这些值域. "如果调用这些值域"这个问题分为两种观点: 1. 应该直接调用它们 2. 应该通过访问函数调用它们. 我觉得大部分情况下直接调用比较方便, 过多的访问函数还会造成类中的函数过多, 当然将来如果我觉得直接调用带来了一些问题, 写一个一个的访问函数也并不是很困难...
阅读全文
摘要:试想这么一个情况: 有一个Employee类, 这个类中含有一个部门(Department)属性, 并且Department是一种类. 如果我想知道某职工所在部门的经理人是谁的时候, 我需要通过 xxEmployee.Department.Manger来访问. 但这样做有个缺点是对于其它代码, Department是public的, 其它代码能够访问到Department里的其它特性. 可以在 Employee 类中写一个GetManger()方法进行封装, 在调用的时候只需要 xxEmployee.GetManger() 就行了...
阅读全文
摘要:某跨国日化公司, 肥皂生产线存在包装时可能漏包肥皂的问题, 肯定不能把空的肥皂盒卖给顾客, 于是该公司总裁命令组成了以博士牵头的专家组对这个问题进行攻关, 该研发团队使用了世界上最高精尖的技术 (如红外探测, 激光照射等), 在花费了大量美金和半年的时间后终于完成了肥皂盒检测系统, 探测到空的肥皂盒以后, 机械手会将空盒推出去. 这一办法将肥皂盒空填率有效降低至5%以内, 问题基本解决...
阅读全文