随着系统的交互越来越多,通过接口相互调用是难免的。近来分析几个程序发现一个不好的代码编写方式,使得系统间的耦合越来越高,其最主要的表现就是耦合扩散问题。
随着产品的不断发展,当需要使用新模块替代旧模块时,这种扩散的耦合,不但使本系统变得复杂而且使得依赖系统的切换变得十分不易。一下是利用适配器思想提供的一种代码编写思路,希望给各位在新开发功能时一个参考:
<wbr></wbr>
一、 所有系统间的交互代码都建立到单独适配器package中,使依赖范围最小,防止扩散。例如WST中建立com.nstc.wst.adapter包,用于放置所有与系统间交互的代码。
例如与预算的交互:com.nstc.wst.adapter.budget
<wbr><wbr><wbr><wbr><wbr><wbr> 与工作流的交互:com.nstc.wst.adapter.workflow</wbr></wbr></wbr></wbr></wbr></wbr>
例如预算支持CFB和BDG,则包结构如下:
<wbr></wbr>
<wbr></wbr>
二、<wbr>而编写一个适配器需要采用如下模式方式,例如预算适配器:<wbr><wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><img alt="" src="http://my.csdn.net/uploads/201208/08/1344402829_3512.jpg"><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr>1. 在com.nstc.wst.adapter.budget包中应该建立如下类:</wbr>
1). BudgetAdapter接口: 包含需要适配各个系统的统一的抽象方法,各系统对该接口进行实现;
2). BudgetService接口:继承自BudgetAdapter接口,用于将适配的方法对内发布给本系统,除适配器接口方法外,可以增加与预算功能相关的接口方法;
3). BudgetServiceImpl类:实现BudgetService方法,用于根据系统参数或根据注入的不同适配器实现来进行调用(只是简单的调用,一般没有复杂逻辑);
<wbr></wbr>
2. 例如WST要支持对接BDG系统,则在com.nstc.wst.adapter.budget.bdg包中建立如下类:
1). BDGBudgetAdapterImpl类:实现了BudgetAdapter接口,并通过各种方式调用BDG系统,将于BDG的所有交互聚焦到com.nstc.wst.adapter.budget.bdg包或其子包中;
<wbr></wbr>
3. 例如WST同时要支持对接CFB,则在com.nstc.wst.adapter.budget.cfb包中建立如下类:
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>1). CFBBudgetAdapterImpl类:实现了BudgetAdapter接口,并通过各种方式调用CFB系统,将于CFB的所有交互聚焦到com.nstc.wst.adapter.budget.cfb包或其子包中;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
4. 对于采用BudgetService继承BudgetAdapter可以保证在Spring中根据类型自动注入时,只注入BudgetServiceImpl,而不会注入BDGBudgetAdapterImpl或CFBBudgetAdapterImpl,从而防止Spring因为发现多个接口实现而注入出错;
5. 而BudgetServiceImpl的代码也相当简单,类似于如下代码:
以上是该类的一种写法,即通过注入不同的实现访问不同的系统。另外也可以在new的时候传递一个系统参数,通过参数控制调用不同的系统(这样即可以通过界面参数动态控制系统调用):
<wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr> 最后: 如上模式是一种参考,用于解决系统间耦合扩散问题,同时可以很好的适配依赖系统的升级(例如工作流等基础模块)。即使目前系统例如支持BDG,也采用这种模式编写代码,将给未来软件的维护代理极大的益处和成本。</wbr></wbr></wbr></wbr>
相关推荐
Android适配器模式设计思想 详细信息参考http://blog.csdn.net/huahuadashen/article/details/21002599
C#设计模式之适配器模式应用实例
- 第19章 适配器模式19.3 适配器模式的应用19.3.1 适配器模式的优点适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就
DPDP适配器在PROFIBUS总线网络中的应用
适配器模式是一种行为模式,它可以把一个类的接口转换成为另一个所期待的另一种接口,这样可以使原本因接口无法在...适配器模式有类的适配器和对象的适配器两种形式,这里只介绍对象的适配器模式(与类适配器模式类似)
MAX8844等双输入充电器处理利用USB和适配器供电的充电器,器件还具有高达28V的输入过压保护。 充电器常见的设计考虑是从多电源供电问题,特别是采用圆形连接器时,可能会连接到不正确的适配器。为避免这种事件的...
设计模式之适配器模式,通过实际例子讲述适配器模式的使用,原理和特点
Oracle协议适配器错误问题解决ERROR:ORA-12560:TNS:协议适配器错误
Android自定义适配器
java 监听技术中适配器的应用,这里仅是个小程序 仅供参考
设计模式--适配器模式java例子
设计模式系列之适配器模式,分别以Java,Android,IOS进行讨论
主要介绍了Java适配器模式应用之电源适配器功能,较为详细的分析了适配器模式的概念、原理及Java基于适配器模式实现电源适配器功能的相关操作技巧与注意事项,需要的朋友可以参考下
设计基于单片机的通用电源适配器利用光伏能源pdf
Volley。fastJson解析网络Json ,多线程显示图片,简单缓存图片,万能适配器,完美解决图片排序混乱问题,完美解决图片多次加载问题
BIZTALK2006灵活的适配器应用.ppt
android适配器,通用适配器
万能网络适配器驱动器,万能网络适配器驱动器万能网络适配器驱动器万能网络适配器驱动器万能网络适配器驱动器万能网络适配器驱动器万能网络适配器驱动器万能网络适配器驱动器
光纤技术资料,型号应用,关于光纤适配器技术参数和应用
[刚刚上传的demo运行有问题,重新传了个新的],这个的一个iOS的适配器模式的实例代码,目前就是一个简单的demo,后期还会更新适配器在 MVC,MVP,MVVM中的使用,demo对应着简书:https://www.jianshu.com/p/e2ebcf19098f,...