重构 — 改善既有的类图设计 条款7:为每个角色增加一个接口
2008-06-06 10:24
337 查看
重构 — 改善既有的类图设计
条款7:为每个角色增加一个接口
黄国强 2008/6/6
单一职责原则(Single Responsibility Principle,SRP)[1] Robert C. Martin 是这样解释的:Each class should have one and only one reason to change.一个类只能因为一个因素而改变。
从上面所述可以看出,单一职责是针对一个类的。但是我这里有个不同观点,即,单一职责是针对接口的。现实的例子,是我们每个人都承担了太多的职责,这是客观存在的。每个人只承担一个职责,这是理想状态,非常少见。请看图 1 。
图 1
图中类4被类1、2、3调用。承担了为三种不同类型的类服务的职责。根据单一职责原理,重构如图2 。
图 2
图2 中我增加了接口1、2、3,而原先的类4从这三个接口中继承。重构后带来了一个好处,即将类4和类1、2、3解耦。未来,如果需求发生变化,觉得类4过于庞大和复杂,可以将类4重写或分拆。而类1、2、3对此将一无所知。
现实的例子,比如一个小公司,仅老板一个人,他需要承担从总经理到员工所有的职位的职责。面对不同的客户,他拿出不同职位的名片。随着公司的发展,他会按 职位招聘一些符合这些职位的人。让这些人分担他的职责。在这里。老板就是图1的类4,而总经理职位、部门经理职位、员工职位等就是接口1、2、3。
[1] 敏捷软件开发:原则、模式与实践 英文原名 Agile Software Development: Principles, Patterns, and Practices
作者 : Robert C.Martin
清华大学出版社 | 出版日期 : 2003 年 9 月
条款7:为每个角色增加一个接口
黄国强 2008/6/6
单一职责原则(Single Responsibility Principle,SRP)[1] Robert C. Martin 是这样解释的:Each class should have one and only one reason to change.一个类只能因为一个因素而改变。
从上面所述可以看出,单一职责是针对一个类的。但是我这里有个不同观点,即,单一职责是针对接口的。现实的例子,是我们每个人都承担了太多的职责,这是客观存在的。每个人只承担一个职责,这是理想状态,非常少见。请看图 1 。
图 1
图中类4被类1、2、3调用。承担了为三种不同类型的类服务的职责。根据单一职责原理,重构如图2 。
图 2
图2 中我增加了接口1、2、3,而原先的类4从这三个接口中继承。重构后带来了一个好处,即将类4和类1、2、3解耦。未来,如果需求发生变化,觉得类4过于庞大和复杂,可以将类4重写或分拆。而类1、2、3对此将一无所知。
现实的例子,比如一个小公司,仅老板一个人,他需要承担从总经理到员工所有的职位的职责。面对不同的客户,他拿出不同职位的名片。随着公司的发展,他会按 职位招聘一些符合这些职位的人。让这些人分担他的职责。在这里。老板就是图1的类4,而总经理职位、部门经理职位、员工职位等就是接口1、2、3。
[1] 敏捷软件开发:原则、模式与实践 英文原名 Agile Software Development: Principles, Patterns, and Practices
作者 : Robert C.Martin
清华大学出版社 | 出版日期 : 2003 年 9 月
相关文章推荐
- 重构 — 改善既有的类图设计 条款10:将多个接口的实现类合并成一个
- 重构 — 改善既有的类图设计 条款16:每个类只包含两个聚合箭头
- 重构 — 改善既有的类图设计 条款15:区分基类和接口
- 重构 — 改善既有的类图设计 条款4:消除重复的依赖关系
- 重构 — 改善既有的类图设计 条款1:将双向依赖改变成单向依赖
- 重构 — 改善既有的类图设计 条款14:将多个继承类对外部的依赖上移至基类
- 重构 — 改善既有的类图设计 条款8:消除继承类和基类中重复的依赖关系
- 重构 — 改善既有的类图设计 条款2:流水不争先
- 重构 — 改善既有的类图设计 条款9:用Pimpl惯用法隐藏细节
- 重构 — 改善既有的类图设计 条款5:给工厂加一个代理
- 重构 — 改善既有的类图设计 条款6:模块的防火墙
- 重构 — 改善既有的类图设计 条款12:消除聚合内部的返回参数的复制
- 重构 — 改善既有的类图设计 条款11:去除对聚合内部的引用
- 重构 — 改善既有的类图设计 条款3:用 FACADE 类消除依赖关系的交叉
- 重构 — 改善既有的类图设计 条款13:用观察者模式来维护概念的完整性
- 模块化设计,面向接口开发。不断重构设计和代码,一个大幅提高开发效率的好方法:不断重构既有代码和设计,为复用准备。同时也是优化。
- 『重构--改善既有代码的设计』读书笔记----Extract Class
- 重构--改善既有代码的设计--读书笔记1
- 作业.设计一个动物声音模拟器(接口)
- PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用【链接:http://www.cnblogs.com/baochuan/archive/2012/04/10/2437688.html】