流程与实现分开的理解
2013-01-21 20:50
141 查看
流程与实现分开的理解
一. 设计1
看如下图:图1.
图1左边的这个流程, 就是需要调用机器人向左走, 向右走. 而可能有很多种机器人(例如有中国机器人, 美国机器人, 德国机器人 ). 本来业务流程与使用哪国机器人是无关的, 流程只管命令机器人完成其动作, 不管机器人是怎么完成的.
所以通过上图中的"机器人通用接口"来隔离业务流程与具体机器人, 这样就避免了业务流程与具体哪国机器人产生过于强烈的联系.
二. 设计2
对比图2的设计.图2.
图2把"机器人通用接口"去掉了. 流程每走一步要判断是哪一国的机器人. 把业务流程与机器人种类耦合在一起了
三. 对比
1. 如果增加一种机器人, 设计1不需要重新测试流程, 只需增加一种机器人类即可. 而设计2由于在每走一步都要判断哪一国的机器人, 原则上流程需要重新测试.四. 应用
4.1 其实在开发中遇到很多这种的场景.
例如:A. 控制打印机打印图形(打印图形的流程是固定的, 或者说打印图形的流程与具体用什么打印机是没有关系的), 此时应该把打印图形的流程与具体打印机的调用解耦(使用接口来隔离).
B. 某个程序过程需要调用某类型的硬件, 这种硬件可能有很多种型号. 而该程序过程与具体的硬件型号是无关的. 解耦吧.
4.2 怎么解耦(就4.1.A和4.1.B).
A. 分析这类硬件有什么公共的特性, 例如打印机 开始打印, 查询是否在打印, 查询状态, 查询缺纸等等.B. 分析你的业务流程用到了硬件的那些特性, 例如用到了开始打印, 查询缺纸.
C. 通用接口定义的接口就是业务流程中用到的硬件特性, 例如4.2.B中开始打印, 查询缺纸.
D. 业务流程只调用通用接口中的接口.
E. 具体的硬件类实现通用接口.
F. 有时并不是很通用, 那就需要特殊处理.
五. 总结
其实无非就是使用接口来解耦. 就是在软件设计开发中, 对两个在某一方面"没有联系"的事物通过接口来解耦. 如果把两个在某一方面"没有联系"的事物耦合在一起,就是自找麻烦了.
这里的"没有联系", 通过4.1.A和4.1.B去理解: 业务流程使用硬件, 也就是一种"使用"关系, 类图中说的"依赖"关系(这里有说明http://blog.csdn.net/cay22/article/details/6034635)
再来一句: 存在"依赖"关系的两个类注意解耦, 但又不是绝对.
自己还是比较理解的, 但是自己表达得一般般, 献丑了
相关文章推荐
- Spark SQL深度理解篇:模块实现、代码结构及执行流程总览
- JBPM4工作流之流程变量的应用和动态指定工作流中某一个任务的办理者以及工作流的决策理解和实现
- spring security 多登陆入口实现方式 以及对spring security认证流程的理解
- 模拟i2c实现流程
- ETL流程概述及常用实现方法
- 微信公共服务平台开发(.Net 的实现)12-------网页授权(上 :更加深入理解OAuth2.0 )
- 对理想团队模式构建的设想以及软件流程的理解
- 理解向量vector的一些实现细节
- 我所理解的设计模式(C++实现)——中介者模式(Mediator Pattern)
- 理解Stack、Heap并深入实现ObjC中alloc、retain、release与dealloc方法
- 我所理解的设计模式(C++实现)——建造者模式(Builder Pattern)
- php编程之短信发送接口调用流程的实现
- 个人对理想团队模式构建的设想以及对软件流程的理解
- 翻翻git之---自己定义邮件发送buttonSendButton(流程分析,实现思路能够学习下)
- 理解数组,结构 ,函数指针,指针函数,数组指针,指针数组,结构指针的定义和实现
- Mahout基于hadoop实现itembased协同过滤流程解析
- 理解Native Crash处理流程
- co模块的实现原理的理解
- 深入理解 Android 之 View 的绘制流程(一)
- ios开发之---将数据写入和读取与沙盒的具体理解和实现。