在平时的开发中,我们总是习惯于使用过程化的思维方式来编写代码,没有通过开发高内聚的方法,来结构化自己的思维,从而消除逻辑重复,逻辑复用不仅仅是指在一个平面内的逻辑复用,更应该是一种结构化的逻辑复用。下面,我用平时开发过程中一个重构的过程,来做一个描述。
假设,现在有三个类,如下图所示:
在这三个class中,分别有三个重复的属性:a, b, c, 而且这三个属性具有相关性,对应于一个功能的具体实现,
而这个具体实现,分别分布在了三个不同的业务中。首先,从这三个不同业务实现类中,抽取出一个基类。需要说明的是对于spring这样的使用注解方式,来注入依赖关系的,基类注解的关键字是:@MappedSuperclass
在功能处理类FunctionHandler类中,对这个功能的具体实现做处理,如下图:
参数的类型是 ABC,而不是A或B或C。利用继承或者多态,结构化地消除重复逻辑并复用。开发高内聚的方法,我个人认为对于消除重复逻辑,是很重要的。而高内聚的方法,肯定是存在于一个结构中的。应尽量避免使用过程化的思维习惯来开发软件,使用结构化的面向对象的方式来思考。消除重复的逻辑,获得变化空间!
最后,我认为是《测试驱动开发》,《卓有成效的程序员》给我了这样的启发,感谢Kent Beck!
假设,现在有三个类,如下图所示:
![](http://dl.iteye.com/upload/attachment/0071/2734/2c304196-a328-3dc6-8e11-1ec31e8e5548.png)
在这三个class中,分别有三个重复的属性:a, b, c, 而且这三个属性具有相关性,对应于一个功能的具体实现,
而这个具体实现,分别分布在了三个不同的业务中。首先,从这三个不同业务实现类中,抽取出一个基类。需要说明的是对于spring这样的使用注解方式,来注入依赖关系的,基类注解的关键字是:@MappedSuperclass
![](http://dl.iteye.com/upload/attachment/0071/2736/f5a53dcf-38c6-3e94-8ec0-2c8f897b0463.png)
在功能处理类FunctionHandler类中,对这个功能的具体实现做处理,如下图:
![](http://dl.iteye.com/upload/attachment/0071/2738/b896fe05-b68d-3010-a457-b4a25cd6313e.png)
参数的类型是 ABC,而不是A或B或C。利用继承或者多态,结构化地消除重复逻辑并复用。开发高内聚的方法,我个人认为对于消除重复逻辑,是很重要的。而高内聚的方法,肯定是存在于一个结构中的。应尽量避免使用过程化的思维习惯来开发软件,使用结构化的面向对象的方式来思考。消除重复的逻辑,获得变化空间!
最后,我认为是《测试驱动开发》,《卓有成效的程序员》给我了这样的启发,感谢Kent Beck!