科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SCA软件架构设计理念分析

SCA软件架构设计理念分析

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SCA (Service Component Architecture) 是一个开发SOA(Service-Oriented Architecture)面向服务应用的简单模型规范,它描述用于使用SOA构建应用程序和系统的模型。本文仅仅涉及插件式设计模式及工厂模式的深化和发展。

作者:李俊杰 来源:Csdn博客 2007年12月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共6页)

Tuscany中工厂设计中涉及泛型的应用

根据我们上面介绍的泛型的基础知识,下面让我们来看看SpringImplementationProviderFactory如何定义的,其中使用了泛型约束SpringImplementation。

public class SpringImplementationProviderFactory 
  implements ImplementationProviderFactory<SpringImplementation>

SpringImplementationProviderFactory另外其中有个方法非常值得注意,就是getModelType,在这儿是SpringImplementation.class。

public Class<SpringImplementation> getModelType() {
return SpringImplementation.class;
}

类似的我们看ResourceImplementationProviderFactory的定义,其中使用了泛型约束ResourceImplementation。

public class ResourceImplementationProviderFactory implements 
  ImplementationProviderFactory<ResourceImplementation>

它同样有个方法getModelType,在这儿是ResourceImplementation.class。

public Class<ResourceImplementation> getModelType() {
return ResourceImplementation.class;
}

那么,这个ModeType有什么神秘的用途呢?来看DefaultProviderFactoryExtensionPoint的代码,从以下代码可以看出,在HashMap中的key值为providerFactory.getModelType(),到这儿明白了ModelType的用途了吧!

private final Map<Class<?>, ProviderFactory> providerFactories = new HashMap<Class<?>,

ProviderFactory>();

public void addProviderFactory(ProviderFactory providerFactory) {
providerFactories.put(providerFactory.getModelType(), providerFactory);
}

下面是META-INF/services/ org.apache.tuscany.sca.provide.ImplementationProviderFactory的片断,从中也可以找到model的身影,从而可以看出model泛型约束是贯穿全剧的线索。

org.apache.tuscany.sca.implementation.spring.SpringImplementationProviderFactory;
  model=org.apache.tuscany.sca.implementation.spring.SpringImplementation

在Tuscany的工厂设计中都使用了类似的设计理念,使用要创建的类或者是类的接口作为其工厂HashMap中的Key,这样就能很方便地取出这个工厂,创建这个类了。从DefaultProviderFactoryExtensionPoint中的获取工厂可以看出这一点,接口或实现类都可以作为key保存到HashMap中。

public ProviderFactory getProviderFactory(Class<?> modelType) {
loadProviderFactories(); 
Class<?>[] classes = modelType.getInterfaces();
for (Class<?> c : classes) {
ProviderFactory factory = providerFactories.get(c);
if (factory != null) {
return factory;
}
}
return providerFactories.get(modelType);
}

4、结束语

以上内容仅仅涉及插件式设计模式及工厂模式的深化和发展,随后将介绍有关Proxy及invocation方面的设计理念,还有Assembly,contribute和binding的具体设计思想,最后介绍Tuscany整体架构设计思想,敬请关注。共享是我的准则,共同提高是我的目标。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章