Component/Service Oriented Software System Development Thinking

1. Current Component/Service Oriented Software System Development Model
2. Looking into Component (Coming later)
3. Looking outside Component (Coming later)

-

本文是Teddy关于基于组件及服务为中心的软件系统开发的进一步思考的系列文章的第一篇,探讨Teddy对当前的基于组件及服务的软件系统开发现状及基本思想的理解。本系列文章一共三篇,在之后两篇中Teddy将站在“组件”这样一个点上分别Looking into组件和Looking outside“组件”这个点,从而分别思考对第一篇中描述的软件开发模型的改进的可能方案。Teddy并非软件开发方面的资深专家,而只是一位喜欢思考的普通程序员,对软件开发这样一门科学的认识难免是具有非常的局限性的,因此,本文的观点仅代表Teddy的个人见解,如果您认为文中的观点过于奇特或幼稚,或者有失偏颇的,欢迎给与批评指教。
 
Current Component/Service Oriented Software System Development Model
 
我将自己理解的这样一个模型,比较简单的画了一张MindMap图。
 
请下载下面的MindMap图,并打开html文件察看MindMap图。您的浏览器需要支持Java Applet,您的系统必须正确安装Sun的JRE v1.4+及相关浏览器插件。如果在察看MindMap图方面有问题的话,请自行查阅在浏览器中正确运行Java Applet的相关参考资料,Teddy并不承诺回答您这方面的问题,这里先说句抱歉。另外,如果不能察看Applet,也可以打开zip包内包含的pdf文件察看MindMap展开后的静态效果。
 
 
-
 
如果您已经能够正确察看上图,欢迎继续往下阅读!
 
在这个MindMap图中,我简单的将主要的元素分成左右两类,左侧是功能性的元素,右侧则主要是辅助的非功能性元素。 
 
既然是Component/Service Oriented,左侧当然是Component和Service了。而右侧则是使得Services和Component能够协同工作的过程中,起主要作用的一些辅助工具。
 
-
 
让我们从左侧的Service开始。
 
什么是Service呢?
 
节点上我给出了简单注释 - Langauge Independent Components with Unified Language/Platform Independent Interfaces。具体来说,这里的Service泛指语言/平台无关的功能组件,它的对外接口的具体表现形式逻辑上就像一个Method,更具体的定义可以参见Teddy之前的文章《重新诠释SOA》中关于Service的定义,即:
 
-
Service - 一种执行接口,接受外部的调用请求,请求可以包含0到多个参数,根据参数处理该请求后,返回执行结果,结果包含处理的成功或失败状态及0到多个返回参数,其中每个请求参数或返回参数都由一个Key/Value对表示。
 
Service的特性:
1)封装了细节,只要接口和返回结果不变,被封装了的实现细节对用户并不需要关心;
2)一个Service内部可以调用其它Service来实现,甚至可以递归调用Service自身;
-
 
根据Service当前的所在位置,基本可以将Service分为Local Service和非本地的Web Service。
 
请注意区别这里的Service的定义和Web Service的定义与业界关于SOA的标准定义中Service和Web Service的定义相区别。您可以以业界的标准定义来直观地理解上述,但是,这里的定义本质上是一个更高一级的抽象描述。
 
-
 
那么什么又是Component - 组件呢?
 
这里我简单的将所有可重用的平台/语言相关的源代码级别的功能模块和二进制模块统称为Component。您可以展开MindMap图中的下级树枝往下看。
 
每个本地组件都会通过一组接口与外界交互,和组件的定义一样,组件的接口,也可以是源码级或二进制级别的接口
 
本地组件怎样才能通过其接口和外部交互呢?两种情况:本地交互或远程交互
 
如果组件希望和同样存在于本地的提供同样的或者至少是可以识别的本地接口的其他本地组件交互的话,只需要在语言或者二进制级别互相Reference就可以了
 
如果需要交互的组件不能直接通过本地接口来交互,那么我们需要先将语言/平台相关的本地接口映射到平台无关的通用接口(Unified Language/Platform Independent Interfaces)。这个Mapping的过程需要Mapping工具来辅助,而Mapping工具则通过一定的Metadata Configuration来定义映射细节。
 
接着,可以通过更高一级的平台无关接口级Reference或者通过TCP/IP与本地Service或外部Web Service进行交互。这两种交互的媒介虽然不同,但是,基本的原则一致。同时,不论是平台无关接口级Reference或者通过TCP/IP,都需要Checking一组Policy来进行一定的约束,例如安全性检查或其他Contract约定。
 
-
 
我们可以看到,根据这个基本模型,基本可以构造出从大到小,无论是Component Oriented或Service Oriented或Component/Service Oriented的软件系统。因此,我称其为我理解的“当前的基于组件及服务的软件系统开发的基本模型”。

posted @ 2005-11-23 17:10  Teddy's Knowledge Base  Views(2522)  Comments(1Edit  收藏  举报