最近一段时间一直在做基于DCOM 的构件组装工具,学习的过程不忘与大家共同进步,所以这里将介绍一种构架(Architecture)语言的风格。该种风格由ICS of University of California, Irvine [/url] 提出并且实现。
C2 (Component and Connector )是一种基于组件和消息的架构风格(既然是风格就应该有许多种,C2 只是其中的一种),该风格对于构造灵活且扩展性强的软件系统是大有陴益的。C2的最大的特点就是组件之间(between Components )的交流一定要通过消息的传送即连接器所提供的功能才能达到。
在一个特定的构架之中,所有的组件都会处于一种严格的等级制度之中,象中世纪的欧洲一样,骑士必须对领主忠诚,而领主必须队国王忠诚。在C2的构架之中,一个组件只能感觉到等级高于自己的组件提供的服务,而感觉不到等级低于自己的组件的服务。正是这种单向的传递性使得用C2 风格组装起来的系统变得易于维护和扩展。这个问题很好理解,如果构架之中存在回路的话,那么一个组件所要求的服务也可能就是它自己提供的服务,而这本身就不可能。
也可能还有些问题读者没有弄太明白,我先解释一些,但是我这里只是一些简单的说明,如果读者有兴趣,就可以看我在文章后提供的一些网址。
什么是构架?在我看来就是软件系统在开发者眼中的一种高级抽象结构,形式化以后就是ADL (Architecture Description Language)。这种语言用于对于系统的粗粒度的组件和组件之间的联系的一种高层抽象。粗粒度就是指这里的组件可是是单个组件,也可以是一个组件包。构架描述语言真正地减少了系统设计者的负担(设计者会说,我所提供的设计是用描述语言来写的,这很规范而且清晰,不是吗?),因为系统设计者的工作就是系统级别的设计,任何逼迫他或她去做本来应该是程序员做的事情的方式都是不恰当的。
那么有人会说,这样不是同样增加了程序员的负担了吗?因为他们又要花时间去学习理解ADL 了,这确实是个问题。但是我们正在致力于解决这个问题,通过利用对于ADL 的包装和分析 以及我们即将开发的可视化的自动组装工具,我们的目标在于你只要在工具的客户区按照你的需求拖动和组装你所需要的组件,该工具就可以帮你自动组装这些组件甚至能够生成软件系统。
让我们重新回到C2 的世界,先让我们来看看 C2 到底有什么风格?C2 的架构风格用来支持那种具有图形化界面的应用程序,但同时也具有支持另种类应用程序的潜力。
l 基于组件的风格。我们可以用各种各样的语言写组件,比如 C++ , Object Pascal, Cobol, Perl 。在架构之中组件很容易就可以重用或者取代。
l 可升级性。组件可以在分布式的环境下运行,既不需要在一个地址空间内运行。
l 灵活性。概念上的架构和实现上的架构是不同的,多个实现上的架构可以实现一个概念上的架构。
下面再说说C2 的两个主要方面的规则:
1. 组装规则
C2 中有两种基本模块:组件和连接器。一个C2 的架构就可以简单地说成是一系列并发的由连接器连接的组件。组件和连接器都有顶端和底端。它们以下面的方式发生关系:
l 组件的顶端必须对应连接器的底端。
l 组件的底端必须对应连接器的顶端。
l 一个连接器原理上可以连接无限的组件或者连接器。
l 当两个连接器发生关系,它们必定是顶端对应底端。
2. 交流规则
所有的C2 构架中的组件必须也只能通过消息来达到交流的目的。每个组件有个顶端和底端。顶端向上发服务要求或者响应上面的通知。底端向下发通知或者响应下面的服务要求。这是一种半工状态因为一个组件只能感觉到等级高于自己的组件提供的服务,而感觉不到等级低于自己的组件的服务。
最后强调一点,C2 专注于系统的概念构架而不是实现构架。UCI 已经用C++ , JAVA实现了C2 的实现构架。构架是动态地被构造的。
下面是一个关于 C2 的网址
[url=http://ftp.ics.uci.edu/pub/c2/publications.html]http://ftp.ics.uci.edu/pub/c2/publications.html 里面是些关于C2 的论文,很全。