模块化(modularization)是一种通过信息隐藏的手段来控制复杂度的设计方法。“信息隐藏”(information hiding)概念的提出者Parnas[33]认为,如果设计的内容可以隐藏或者封装在系统的一个单独的模块当中,那么该内容无法作用于这个系统的其他模块。因此,可以限制该模块上的变化对其他模块所带来的影响。从这个意义上讲,一个模块“由将其独立于其他模块的设计决策(design decision)所塑造,并在其接口的定义中尽可能少地透露它的内部工作的信息”。
模块的概念与组件的概念有所不同。组件是一个系统的组成部分,是以观察者的角度来看待系统,以划分或者分解的方式来界定组件。模块则是以设计者的角度来看待系统,并有意识地在设计中封装模块内部的内容,以方便对整体系统的构造。所以一个系统的模块是该系统的一个组件,但是一个系统的组件则未必是该系统的一个模块。一个系统的组件成为该系统的模块的必要条件是:①与在同一个层次上的其他模块相对独立,即在设计该模块的过程中不需要知道其他与之平行的模块内部的信息;②允许模块之间的重组或替换而不需要对整个系统进行重新组装[34]。在一个系统的设计中,也未必所有的组件都要设计成模块。但将组件设计成模块可以使其易于管理和维护,同时具备可重用性。一个系统模块化的程度可以用模块性(modularity)来表示。模块性是一个普遍的系统概念,用于描述“一个系统的组件可以拆分并重组的程度”[35]。
SOA从本质上讲是一种模块化架构(modular architecture)[36]。SOA的基本要素除了上面介绍的SOAP之外,还包括WSDL(web services description language,网络服务描述语言),用于描述某个Web服务的功能和接口;以及UDDI(universal description,discovery and integration,通用描述、发现与集成服务),用于Web服务的组成与检索,如图3-5所示。在SOA框架下使用Web服务,为不同软硬件平台上的应用提供了一个共同遵守的接口规范,这意味着不同的Web服务之间的数据交换不再需要定制专门的中间件。Web服务可以将服务功能和计算资源进行封装,这使得该服务可以被不同的流程所使用,很大程度上提高了该服务的可重用性。
SOA的模块化特点不但克服了早期EAI的中间件问题,对业务流程的柔性也有很大的促进。一旦组织原有的各项运算功能,无论其所在何种平台、以何种技术实现,都可以被封装成Web服务,那么不同的业务流程就可以通过选取相应服务进行组合。如图3-6所示,同一个服务所封装的功能可以被多个不同的业务流程所使用,一个业务流程可以通过调用和组合多个服务来实现。这种封装和重用性所带来的丰富的服务组合使得业务流程具备丰富多样的变化。在适当的管理机制下,这些丰富的变化可以为业务流程带来较高的柔性水平。但是如果控制不当的话,这种丰富的变化无疑是另外一种复杂度的体现。
(www.daowen.com)
图3-5 SOA的基本技术要素
图3-6 通过选取相应的服务组成不同的业务流程
当前SOA系统的实现上,选取哪些Web服务,以及如何将它们进行服务组合是通过人工设定的方式,例如使用BPEL进行编排。现在的辅助工具已经非常易于使用,用户不需要太多的计算机专业知识,便可以在BPEL的环境中完成将服务组合成业务流程的配置。在笔者的教学经历当中,许多非计算机专业的硕士一年级学生都可以在短期内学会并实现简单的BPEL应用。但是这些内容是一项不折不扣的设计工作,选取哪个服务来实现流程中的某个步骤,通常可以出现多个方案。此外,这也是一件“手工活”,也就是说,当Web服务目录中存在非常多的服务时,如何寻找到合适的服务,以及如何判断哪个服务更合适,便成为新的问题。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。