您的位置:首页 > 编程语言

IoC容器与面向方面编程在SP无线运营系统设计中的应用

2009-04-03 21:41 716 查看
一直以来,在SP无线运营系统的中关于同步接口的设计由于上下家系统设计的规范不一致,导致这一部分不能很好的抽象共用,在我近2年来接触的各方平台接口大部分都是以一个接口作为一个页面的形式开放给上下家使用,表现形式只是编程平台的不同,或asp或php等,同一系统各接口的共用部分也多以数据访问层为主。

接下来将就我如何应用IoC控制反转容器和AOP来从技术角度解决这一问题做一个描述。

做无线运营的朋友众所周知,关于用户上下行(以短信,彩信,WAP等方式)直到扣费,涉及到的相关步骤有 预提交,MO同步,MT状态报告,依业务的不同又有可能没有预提交(依靠指令分辨下家),MO同步(MT流程内容控制在SP方),MT状态报告(如SP直接同步状态报告,MT报告就以MO同步形式表现)。

因此这里我首先抽象出三个对象, 分别是 ApiRequest表示预提交原始信息(包括号码,下家ID,附加参数等),ApiSync表示MO同步的原始信息(包括号码,MO上行内容,LINKID或MOID等), ApiStateReport表示状态报告原始信息(包括号码,LINKID,状态参数等)

BT_SyncInterceptor
public class BT_SyncInterceptor : IMethodInterceptor
{
#region IMethodInterceptor Members
public object Invoke(IMethodInvocation invocation)
{
HttpContext context = invocation.Arguments[0] as HttpContext;
//用以多个通道但必须用一个同步地址的情况
if (context != null)
{
if (context.Request["spid"] == "103") //根据spid判断
{
//处理bt的业务需求
}

return invocation.Proceed();
}
else
{
return invocation.Proceed();
}
}
#endregion
}

相应的spring配置文件的sync对象部分也要改动

<object id="sync" type="Spring.Aop.Framework.ProxyFactoryObject">
<property name="Target">
<object type="Api.DefaultSyncHandler, Api" >
<property name="SyncInvoker" ref="DefaultSyncInvoker" />
</object>
</property>
<property name="InterceptorNames">
<list>
<value>BT_SyncInterceptor</value>
</list>
</property>
</object>

<object id="BT_SyncInterceptor" type="AnotherAssembly.BT_SyncInterceptor, AnotherAssembly" />

如上所示,咱们通过修改spring配置文件把这个BT的mo同步接口指向了另一个经过包装的DefaultSyncHandler对象,WAPPER就是Spring.Aop.Framework.ProxyFactoryObject,通过装在另一个程序集里的BT_SyncInterceptor类横切处理相关的业务逻辑,这样咱们就既保留了原有的处理方式不变来适应大部分的业务需求,碰到极端的情况,还可以通过第三方组件的形式来进行弥补,正所谓你有张良计我有AOP,哈。

当然,实际的业务需求比上面所述要复杂的多,这里展示的只是一个大概的设计框架,实现方法。
谨记,备忘。

--------------------------------------
PS:对于这类IO密集型的处理,应用异步方式处理应该效率更好,,正在努力学习老赵infoQ里关于异步托管的实现方式。。。。。希望有下文描述解决这方面的机会。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐