`
sony-soft
  • 浏览: 1019467 次
文章分类
社区版块
存档分类
最新评论

利用适配器思想减少应用间耦合扩散问题

 
阅读更多
adaptor和adapter都是适配器的意思,adapter是正词(adaptor是英式用法,是变异),因此对下面的内容都修正为adapter
随着系统的交互越来越多,通过接口相互调用是难免的。近来分析几个程序发现一个不好的代码编写方式,使得系统间的耦合越来越高,其最主要的表现就是耦合扩散问题。
随着产品的不断发展,当需要使用新模块替代旧模块时,这种扩散的耦合,不但使本系统变得复杂而且使得依赖系统的切换变得十分不易。一下是利用适配器思想提供的一种代码编写思路,希望给各位在新开发功能时一个参考:
<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>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics