2009-08-12 20:18:00
摘要:Introduce Design By Contract:契约式设计
契约式设计(DBC,Design By Contract)定义了方法应该包含输入和输出验证。因此,可以确保所有的工作都是基于可用的数据,并且所有的行为都是可预料的。否则,将返回异常或错误并在方法中进行处理。在我们的示例中,输入参数很可能为null。由于没有进行验证,该方法最终会抛出NullReferenceException。在方法最后,我们也并不确定是否为用户返回了一个有效的decimal,这可能导致在别的地方引入其他方法。
阅读全文
2009-08-10 10:44:41
摘要:某个函数返回的对象,需要由函数调用者执行向下转型动作,将向下转型动作移到函数中。
阅读全文
2009-08-03 20:27:24
摘要:你希望在创建对象时不仅仅是对它做简单的建构动作,将构造函数替换为工厂函数。
阅读全文
2009-07-30 13:19:11
摘要:Replace Exception with Test:以测试取代异常
面对一个调用者可预先加以检查的条件,你抛出了一个异常,请修改调用者,使它在调用函数之前先做测试。
阅读全文
2009-07-25 20:25:00
摘要:Replace Error Code with Exception:以异常代替错误码
某个函数返回一个特定的代码,用以表示某种错误情况,请改用异常。
阅读全文
2009-07-22 05:07:01
摘要:Introduce Parameter Object:引入参数对象
某些参数总是很自然地同时出现,以一个对象取代这些参数
阅读全文
2009-07-02 19:23:29
摘要:Return ASAP:尽早返回
该话题实际上是诞生于移除箭头反模式重构之中。在移除箭头时,它被认为是重构产生的副作用。为了消除箭头,你需要尽快地return。
阅读全文
2009-06-20 01:57:34
摘要:Remove Double Negative:删除双重否定
尽管我在很多代码中发现了这种严重降低可读性并往往传达错误意图的坏味道,但这种重构本身还是很容易实现的。这种毁灭性的代码所基于的假设导致了错误的代码编写习惯,并最终导致bug。如下例所示:
阅读全文
2009-06-12 04:26:49
摘要:你有一个方法,其内部完全取决于参数值而采取不同反应,针对该参数的每一个可能值,建立一个独立方法。
阅读全文
2009-06-07 03:23:21
摘要:Parameterize Method:另方法携带参数
若干方法做了类似的工作,但在方法本体中却包括了不同的值,可以建立单一方法,以参数表达那些不同的值。
先看一个简单的例子:
阅读全文