扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:李俊杰 来源:Csdn博客 2007年12月26日
关键字:
在本页阅读全文(共6页)
3、Tuscany SCA软件架构设计思想
通过SCA基础知识的介绍,我们了解了大致的需求,感谢Tuscany的架构师和工程师,是他们奉献了自己的聪明智慧,创作出如此赏心悦目的精品大作,深刻品味大型软件架构设计的精髓,分享软件设计的豪华盛筵,汲取设计的精华。
(1)插件式软件设计思想
不论是Eclipse,还是炒得火热的ESB,都使用插件式的设计思想,所谓插件式,可插拔的软件架构,就是极大地体现了松耦合的设计理念,虽然是从原有的设计模式阵营中走来,但其出现给现有的设计模式以很大的冲击并提升了和补充现有的设计模式。在Tuscany中同样如此,可以说把插件式的设计思想用到了极致。下面类图非常简单,但它就是类似于注册中心功能的扩展点注册类,它是Tuscany的最基本和最基础的设计架构,后面有相对复杂的设计,也是建立这种基本架构的基础之上拓展出来的。
图3 |
图4 |
基本工作原理:
上面的静态类图表现了注册结构的静态分析,类org.apache.tuscany.sca.core. DefaultExtensionPointRegistry的getExtensionPoint流程图体现了在如何从注册中心获取需要的对象的过程。从本质上分析ExtensionPointRegistry就类似于Collection,其功能无外乎可添加,可删除,可获取,这儿用HashMap<Class<?>,Object>来实现,HashMap也就是put,get,remove方法。可以把DefaultExtensionPointRegistry理解为HashMap的特殊封装,其中<Class<?>,Object>是非常重要的。
换句话说,META-INF/services下面的文件相当于插件板组,其中包含着若干个插件板,每个插件板的插件孔是可以预先调配的。另外,类似于树的概念,有些插件板的插孔也可以插入子插件板,下面显示一个简单插件板的例子,插件板的名称是“org.apache.tuscany.sca.contribution.resolver. ModelResolverExtensionPoint” ,插件板的名称一般是Java接口的名称,而插孔的名称一般为实现类的名称,该例子仅仅声明了一个插孔,插孔名称为“org.apache.tuscany.sca.contribution.resolver.DefaultModelResolverExtensionPoint”,另外我告诉你一秘密,凡是以“ExtensionPoin”结尾的,一般是子插件板,呵呵!一般人我不告诉他。
# Licensed to the Apache Software Foundation (ASF) under one |
从而,我们就可以非常方便地对插件板进行修改,或增加插件板来满足系统不断新增需求,不断新增模块,修改模块的需求。并且DefaultExtensionPointRegistry是系统中的根插件板,是其他所有插件板或者插件的根(root)。
(2)Factory设计模式的深化和发展
与插件式软件设计模式类似,Factory设计模式方面也有很大地发展和提高,为此仅用例子如SpringImplementationProviderFactory来说明Facory模式方面的设计理念和技巧。
如图所示,左上角的部分也同样是插件式模式。在META-INF/services/目录下有文件名称为“org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint”,文件内容有用的仅一行是“org.apache.tuscany.sca.provider.DefaultProviderFactoryExtensionPoint”,就是这样把DefaultProviderFactoryExtensionPoint插入到DefaultExtensionPointRegistry插件板的,同样ProviderFactoryExtensionPoint为接口名称,DefaultProviderFactoryExtensionPoint为实现该接口的具体实现。
图5 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者