IMZRH的日志

努力成为一个有用的人

导航

随笔分类 -  Tips

摘要:我经常可以在一些遗留代码中见到一些类明确的违反了SRP(Single Responsibility Principle)原则,这些类通常以“Utils”或“Manager”后缀结尾,但有时这些类也没有... 阅读全文

posted @ 2009-10-19 16:57 张荣华 阅读(1127) 评论(1) 推荐(0) 编辑

摘要:今天要说的重构来自于Martin Fowlers的重构目录,你可以在这里看到原始的描述。 避免双重否定重构本身非常简单实现,但我却在太多的代码中见过因为双重否定降低了代码的可读性以致于非常让人容易误解... 阅读全文

posted @ 2009-10-19 15:33 张荣华 阅读(361) 评论(1) 推荐(0) 编辑

摘要:契约式设计(Design By Contract DBC)规定方法应该对输入和输出进行验证,这样你便可以保证你得到的数据是可以工作的,一切都是按期望进行的,如果不是按期望进行,异常或是错误就应该被返回... 阅读全文

posted @ 2009-10-19 15:04 张荣华 阅读(456) 评论(1) 推荐(0) 编辑

摘要:今天要说的重构基于c2 wiki上的条目,你可以在这里查看该条目,在这里还有另一篇文章。 简单的来说,当你的代码中有很深的嵌套条件时,花括号就会在代码中形成一个箭头。我经常在不同的代码中看到这种情况,... 阅读全文

posted @ 2009-10-16 16:59 张荣华 阅读(686) 评论(1) 推荐(0) 编辑

摘要:“引入参数对象”重构来自于Martin Folwers的重构目录,你可以在这里找到原始的描述。 有时当一个方法所需要的参数大于5个后,读懂该方法的签名就会变得比较困难,就像下面的代码: 1: publ... 阅读全文

posted @ 2009-10-16 13:37 张荣华 阅读(627) 评论(1) 推荐(0) 编辑

摘要:今天要说的重构没有明确的出处,分解方法是我给它起的名字,我相信肯定还有别人做过类似的重构但却叫别一个名字,如果你在看完本文后觉得还有比“分解方法”更好的名字,请通知我。 分解重构是元重构的一种,所做... 阅读全文

posted @ 2009-10-16 13:30 张荣华 阅读(502) 评论(1) 推荐(0) 编辑

摘要:今天要说的重构来自于Martin Fowlers的模式目录,你可以在这里找到它。 昨天我们说的“提取子类”重构是指当基类中的一个责任不被所有的子类所需要时,将这些责任提取到合适的子类中。而我们今天所说... 阅读全文

posted @ 2009-10-15 14:45 张荣华 阅读(421) 评论(1) 推荐(0) 编辑

摘要:今天要说的重构来自于Martin Fowlers的模式目录,你可以在这里找到它。 当你的基类中存在一些方法不是所有的子类都需要访问,你想将它们调整到子类中时,这个重构会很有用。我举一个简单的例子,我们... 阅读全文

posted @ 2009-10-15 14:39 张荣华 阅读(505) 评论(0) 推荐(0) 编辑

摘要:今天要说的重构最早由Gof提出,在网络上可以找到很多的资源。两个不同的工厂模式可以在这里找到:Abstract Factroy Factory Method 通常我们需要在代码中设置一些对... 阅读全文

posted @ 2009-10-15 14:30 张荣华 阅读(691) 评论(0) 推荐(0) 编辑

摘要:今天要说的重构来自于我日常工作中的发现而不是其它的什么地方,我在日常工作中经常使用这个重构,我想针对今天要解决的问题可能还有其它的解决方案。 在日常的编码中我们经常需要用到异常来控制程序流,下面的代码就是一个例子:     1: public class Microwave 2: { 3: private IMicrowaveMotor Motor { get; se... 阅读全文

posted @ 2009-10-13 15:49 张荣华 阅读(476) 评论(0) 推荐(0) 编辑

摘要:今天要说的重构来自于Martin Fowler’s 的重构目录,你可以在这里找到原始描述。 这个经常使用的重构的使用场景是在类中有一些方法你想把它们提取到父类中以便同一继承层次的其它类也可以访问这些方... 阅读全文

posted @ 2009-10-12 10:14 张荣华 阅读(326) 评论(0) 推荐(0) 编辑

摘要:有时当我们的条件关系比较复杂时,代码的可读性会比较差,所以这时我们应该根据条件表达式是否需要参数将条件表达式提取成可读性更好的属性或是方法,如果条件表达式不需要参数则可以提取成属性,如果条件表达式需要参数则可以提取成方法。下面是我们来看一段重构前的代码: 1: public class RemoteControl 2: { 3: private string[] Functions { get; ... 阅读全文

posted @ 2009-10-12 09:49 张荣华 阅读(478) 评论(0) 推荐(0) 编辑

摘要:这是最常用的重构之一,我们经常要用到它,因为我们的代码中经常因为这或那的原因产生重复代码,让我们来看下面的例子: 1: public class MedicalRecord 2: { 3: publi... 阅读全文

posted @ 2009-09-29 15:43 张荣华 阅读(409) 评论(0) 推荐(0) 编辑

摘要:当一个类有许多职责时,将部分职责分离到独立的类中可以更好的遵守“类的单一职责原则”,使用“分享职责”这个重构非常简单,让我们来看下面的代码: 1: public class Video 2: { 3:... 阅读全文

posted @ 2009-09-29 15:43 张荣华 阅读(342) 评论(0) 推荐(0) 编辑

摘要:这篇文章要说的重构来自于Martin Fowlwrs的重构列表,你可以在这里查看原始描述 这是一个不常用的重构。当你发现一个方法中存在过多的局部变量时,你可以通过使用“提取方法对象”重构来引入一些方... 阅读全文

posted @ 2009-09-29 15:41 张荣华 阅读(431) 评论(0) 推荐(0) 编辑

摘要:如果你要在你的代码中加入单元测试但有一部分代码是你不想测试的,那么你应用使用今天的重构。在下面的例子中我们应用静态类来完成某些工作,但问题是在单元测试时我们无法mock静态类,所以我们只能引入静态类的... 阅读全文

posted @ 2009-09-29 15:41 张荣华 阅读(308) 评论(0) 推荐(0) 编辑

摘要:今天要说的重构没有固定的来源, 在过去的几年里我使用了该重构的几个变体,我相信这个重构肯定还有其它的变体。 这个重构一般适用的情形是当我们有许多的switch分支语句,并且经常由于有新的条件加入引起分... 阅读全文

posted @ 2009-09-29 15:39 张荣华 阅读(426) 评论(1) 推荐(0) 编辑

摘要:现在让我们来看提取方法这个重构,这是一个简单却又好处多多的重构,首先,它通过提供有意义的方法名会使代码更具可读性;其次见名知义的方法名减少了维护人员的工作量;最后它更好的可读性减少了对代码的臆断,从而... 阅读全文

posted @ 2009-09-28 14:04 张荣华 阅读(328) 评论(0) 推荐(0) 编辑

摘要:现在让我们来看一个经常被忽略的重构,提取接口。但我们注意到超过一个的类要使用某一个类中方法的子集时,我们应该切断它们之间的依赖,让消费者(consumers)使用接口,这非常容易实现但却降低了代码的耦... 阅读全文

posted @ 2009-09-28 14:03 张荣华 阅读(386) 评论(0) 推荐(0) 编辑

摘要:有时继承老是被滥用,继承应该仅仅使用在逻辑环境(logical circumstances)中,但却经常因为编程的方便性被滥用,我见过许多因为滥用继承导致的复杂性增加,来看下面的代码: 1: publ... 阅读全文

posted @ 2009-09-28 14:00 张荣华 阅读(744) 评论(0) 推荐(0) 编辑