与继承相关的一些重构(二)
摘要:5.提取主类:提取一个基类,抽象出共有方法,比较常用的重构,这里的基类也许并不存在,需要自己新建立。 用法场景:当有一个类中的某个方法需要经常被其他的类调用的时候,说明这个方法重用率很高,可以考虑把它抽象出来,放到一个基类中。代码6.提取子类:将基类中的方法放到子类中,这里的子类也许并不存在,需要自己新建立。 用法场景:当基类中的某些方法并不是面向所有或者大多数类的时候,需要把这些方法下放到子类中...
阅读全文
posted @
2010-07-22 15:52
Dennis.Yang
阅读(432)
推荐(0) 编辑
与继承相关的一些重构(一)
摘要:本问主要讲几个涉及到继承方面的重构,继承一般会涉及到抽象类,接口,我们通常把有相似Func的类提取同类项,也就是抽象出接口或者抽象类;这样做的好处不言而喻,可以方便的扩展,修改,维护子类的共有方法,属性,索引等等。使用基类不仅仅是把各个子类联系起来了,更是降低了各个子类间的耦合度,再次体现了面向接口、继承编程的思想。1.提升方法:指将方法向继承链的上层迁移的过程。用法场景:当子类A中的一个方法需要...
阅读全文
posted @
2010-07-19 15:40
Dennis.Yang
阅读(614)
推荐(0) 编辑
必会重构技巧(五):划分职责
摘要:&g 划分职责:根据方法实现的逻辑来安排方法所在的类。 举例理解:这个重构的方法是对单一职责原则(SRP)的贯彻,在Coding的时候,我们不仅仅需要把方法中的逻辑单一化(主要使用 Extract Method),还要把类中的方法安置合理化。比如说有个Book()的类,那么对于Book的一些操作,如增加减少书,设置书的属性那可以交给这个类做;而如另一些方法,如买书,租书就可以交给Cus...
阅读全文
posted @
2010-07-14 16:48
Dennis.Yang
阅读(701)
推荐(0) 编辑
必会重构技巧(四):提取工厂类
摘要:提取工厂类:使用一个简单工厂类来新建对象实例。举例理解:对于一个客户端事件,我们可能需要初始化一个对象实例,并调用其中的几个方法做一系列的操作。如果客户端事件经常需要扩展,那可能每次初始化的对象实例可能都是不同的,那么为了把这个初始化对象的动作封装起来,为了使这个行为更加便于维护,我们就需要把初始化对象的动作交给简单工厂类来统一完成。项目实例:做过一个小型的购物商城。其中有个需求简述如下:管理员可...
阅读全文
posted @
2010-07-13 15:39
Dennis.Yang
阅读(684)
推荐(1) 编辑
必会重构技巧(三):提取接口
摘要:提取接口:当有多余一个类使用另外一个类中的方法时,可以考虑引入接口,解除这种依赖。举例理解:比如说类A中有个方法为Call(Type T),类B和类C中都有方法都要调用Call这个方法,那么我们推荐引入一个接口,这样传参时可以直接new一个接口,可以解除调用方法和实现方法之间的耦合关系。面向接口编程也算是OO中比较重要的吧。项目实例:一般而言在设计的时候,对于比较可能扩展的部分都会用接口或者是抽象...
阅读全文
posted @
2010-07-12 15:32
Dennis.Yang
阅读(1649)
推荐(0) 编辑
必会重构技巧(二):使用多态替换条件
摘要:使用多态替换条件:指在进行类型检查和执行某些类型操作时,最好将算法封装在类中,并且使用多态来对代码中的调用进行抽象举例理解:看定义可能比较迷糊,其实说的简单一点,对于使用分支语句并且分支条件是和类型检查相关的程序段,如 if(type == typeof(TypeA)){...}else if(type == typeof(TypeB)){...},可以把{...}中的Code,尝试放到if的条件...
阅读全文
posted @
2010-07-07 16:56
Dennis.Yang
阅读(1468)
推荐(1) 编辑
必会重构技巧(一):封装集合
摘要:封装集合:将集合中的某些方法封装起来,这些方法一般会牵扯到其他的逻辑。 举例理解:比如你给一个List<T>里面加一个对象的同时,可能还有一个计数器在计算List中对象的个数,我们不用暴露计数器,这样List.Add()和List.Remove()我们就可以封装起来了。 项目实例:我记得我有个项目需要不断的从数据库中读取User的Guid然后狂发Mail。开始的想法很简单,根据Wi...
阅读全文
posted @
2010-07-02 15:29
Dennis.Yang
阅读(1035)
推荐(1) 编辑
重构之路系列-首篇之我对重构的看法
摘要:首先承认,我不是牛人,并且距牛人也差的很远。虽然有三年多的.Net开发经验和若干年的Front-End开发经验,但是对于.Net,当然也可以说是C#,了解的并不多。由于所在公司的原因,我在从第一家软件公司跳槽后基本就是处于吃老本的姿态。因为对于我现在的公司而言,项目的稳定性是第一位的,至于Project架构的如何合理,Code写的多美,设计模式用的多精妙,页面是不是标准化,我们的老大完全不Care...
阅读全文
posted @
2010-07-01 20:50
Dennis.Yang
阅读(663)
推荐(0) 编辑