软件项目实训及课程设计指导——如何实现面向服务的系统架构设计

核心提示软件项目实训及课程设计指导——如何实现面向服务的系统架构设计1、什么是基于SOA的软件系统架构什么是面向服务的软件系统体系架构所谓的SOA其实就是一种新型的软件应用系统的系统体系架构设计形式,在基于SOA架构设计思想所开发实现的企业级软件应

项目训练与课程设计指导——如何实现面向服务的系统架构设计

1.基于SOA的软件系统架构是什么?

什么是面向服务的软件系统架构?

所谓SOA,其实就是软件应用系统的一种新的系统架构设计形式。在基于SOA架构设计思想开发实现的企业软件应用系统中,软件应用系统中各业务功能的程序模块是通过一些松散耦合的服务组件结合统一的接口定义来构建的。

面向服务的软件系统架构的主要特征

在这种架构体系下,它迫使软件应用系统的设计者以“服务”为中心,要求应用系统划分为各种功能模块,有明确定义的接口,每个模块可以提供独立的功能,在不同的场景下通过组合所需的模块可以提供不同的服务。这种软件应用系统的系统架构设计方案不仅可以使服务提供者和服务使用者相互分离、松散耦合,还可以根据服务使用者的应用需求调整所提供的功能服务。

是因为服务提供者和服务消费者是分离的、松散耦合的,可以用完全不同的技术在不同的系统平台上实现和运行,但是可以相互访问和通信,相互交互,相互融合。

此外,面向服务的软件系统架构与其他形式的企业架构的区别在于,面向服务的软件系统架构可以提供业务灵活性和可插拔性,因此可以更好地满足异构应用环境下企业应用系统的集成和整合。

2.面向服务的软件系统架构的主要优势

降低软件应用系统开发和集成维护的成本。

在构建软件应用系统的过程中,软件应用开发者可以不再需要自行开发和实现一些具有通用功能的模块,而是可以购买其他更专业的软件公司提供的功能组件或者直接使用其提供的功能服务,从而减少耗时费力且最终应用效果不理想的开发工作。由于组件之间是松散耦合的,当其中一个功能模块不再能满足应用的需要时,可以在不影响软件应用系统中其他功能模块的情况下对其进行替换。

能够更好地适应和满足企业不断变化的业务需求,增加企业应对业务变化的敏捷性。

企业的业务需求是多变的,不断变化的,这也要求企业信息应用系统本身具有良好的适应性。软件应用系统的开发者可以通过代理、适配器、中介等设计模式,基于面向服务的软件系统架构来改进现有的企业信息应用系统。

此外,实现面向服务的软件系统架构的Web服务组件通过松散耦合的基于消息的通信模型相互交互。所有这些技术特性也能满足信息应用系统在企业应用环境中“随需应变”的应用需求。

面向服务的软件应用系统的系统架构可以提供灵活的业务处理功能实现,业务功能实现的灵活性可以保证软件应用系统能够快速有效地响应业务变化。对于很多企业来说,这个功能可以提高竞争力;另一方面,软件应用系统的系统架构师可以创建业务灵活的系统架构——这种系统架构是既能满足当前业务需求,又能满足未来业务需求的架构。

可以更好的复用企业现有的各类软件应用系统软件。

对于金融、邮政、电力、通信等行业的企业来说,由于其特定的业务需求,企业信息化起步较早,有很多成熟稳定的软件应用系统。目前这些软件应用系统也能满足部分业务需求。企业抛弃这些稳定可靠的应用系统是一种浪费!因此,在构建新的企业应用系统时,用户企业也强烈希望重用现有的软件应用系统。

基于面向服务的软件系统架构设计和开发的软件应用系统通常是在现有系统架构的基础上进行扩展的。它可以利用当前软件应用系统的现有资源,对现有系统和资源进行重用,这将大大降低企业信息化过程中的成本。

它能满足异构环境下各种应用系统之间的互连和集成要求。

VS.Net系统平台倾向于隔离,J2EE系统平台主张开放,导致VS.Net和J2EE系统平台之间企业软件应用的直接互操作性差!面向服务的软件系统架构的主要实现技术是Web service,它使用简单对象访问协议来实现数据通信,而简单对象访问协议SOAP使用可扩展标记语言XML来交换数据——XML是一种平台无关的数据交换语言。

因此,采用面向服务的软件系统架构的软件应用系统能够满足异构环境下各种软件应用系统之间的互联和集成的需求。

3.为什么要应用面向服务的软件系统架构来构建企业应用系统?

异构环境下企业应用系统需要相互集成和整合的客观原因。

企业应用系统不仅需要相互集成,而且业务接入的形式可能是分布式的。实现分布式软件应用系统开发和实现的传统技术采用J2EE技术平台中的J2EE EJB组件技术——因为J2EE技术规范的两大特点体现在“分层”和“分布”上,但J2EE EJB组件技术的重量级实现方案只能在J2EE技术平台中应用,而不能与微软VS.Net技术平台下的软件应用系统直接互联。

企业的信息化建设也是分阶段、分步骤实现的,希望各个阶段的应用系统能够兼容。

企业的发展,业务的拓展,不可能一开始就庞大而完美。随着企业业务活动和经营的深入,支撑业务运作和经营活动的信息系统也需要不断完善和丰富。

每个子系统都希望是独立的,但又能互相沟通合作。

下图是示例项目银行账户信息管理系统中各功能模块的关系图,但银行账户管理系统本身并不是孤立的。网上商城系统和网校系统需要与之互联,为这些软件应用系统提供网上支付功能——购买商品的网上商城系统和用户缴费的网校系统。

而面向对象架构设计和面向方面架构设计所提倡的“封装”和“隔离”,都是针对单个软件应用系统的设计方法。软件应用系统如何“封装”并“同时”协作?

这样可以设计银行账户管理系统中的某个业务功能组件类作为Web服务组件,根据Web服务用户的网上商城系统、网校系统的应用需求,提供相应的账户功能服务。

Web服务的服务提供者和Web服务的服务消费者使用简单对象访问协议进行通信,如下图所示。

这种软件应用系统的系统架构设计结果不仅允许各软件应用系统由不同的技术平台实现,而且提高了各软件应用系统的安全性。它不需要直接的数据操作,但是业务方法是协调的——而且业务方法是可控的,但是公开银行账户管理系统中的数据库表结构,直接公开其数据库系统本身,或者授权访问数据库表中的数据都是不安全的。

下图是本例项目银行账户信息管理系统与网校系统互联互通工作原理的部分截图。银行账户信息管理系统和网上商城系统互联互通的工作原理差不多,这里笔者就不举例了。

面向服务的软件系统架构:SOA最重要的应用

根据上述基于SOA架构的软件应用系统的技术特点,采用这种架构的企业应用系统更多的表现为互联网环境下异构系统之间的互联互通,从而解决互联网环境下不同企业应用系统之间的业务集成问题。

之所以能满足Internet环境下异构系统互连的应用需求,是因为Internet的应用环境不同于Intranet,主要区别和特点如下:

大量的异构系统共存,不同的计算机硬件以不同的方式工作,操作系统不同,编程语言也不同——类似于地球上所有的人类。由于不同民族、不同肤色、不同语言、不同生活习俗的差异,我们该如何直接交流?

读者还必须思考的问题是,由于基于SOA架构的软件应用系统更像是一个内网应用环境,在应用SOA架构设计思想完成软件应用系统设计时,必须充分考虑如何合理解决系统安全性、系统响应性能、数据访问的事务处理、外部服务的“粒度”等技术问题。

当然,并不是说基于SOA架构的软件应用系统只适合内网的应用环境,SOA架构也可以应用在内网的应用环境中。因此,面向服务的软件系统架构设计方法被广泛应用于ERP、CRM、SCM、HRM等企业应用系统的开发和实施中。

4.如何正确应用SOA的基本思想构建松耦合的企业应用系统

为了构建基于SOA架构的企业应用系统,系统设计者需要遵守基于SOA的系统构建的一些基本要求:首先,SOA基于定义良好的接口,促进多个软件应用系统之间的松耦合和交互;其次,每个服务的实现是相互独立的,不依赖于上下文信息和其他服务的工作状态。第三,服务之间的数据交换主要基于文本格式,采用基于标准的消息模型;最后,服务本身并不知道服务提供者和服务消费者之间在传输层面的通信交互。

系统中的主要功能组件应该设计为Web服务组件。

由于面向服务的软件系统架构更多的是一种设计思想或开发思想、开发方法等。,目前具体实现SOA的方法有很多——也就是真正实现SOA。当然,主流的方式是使用WebService技术,这主要是由于Web service技术本身独立于各系统平台的主要技术特征,目前的VS.Net系统平台和J2EE系统平台为Web Service提供了全面的技术支持。

定义每个服务组件应该遵循的外部接口。

在各种支持面向对象编程技术的语言中,提供了类方法的定义语法规则。在定义和声明一个类方法时,一般需要提供以下“接口”信息:方法的名称、方法的各种参数、方法的预期输出结果的数据类型以及可能出现哪种异常。

描述这种“接口”信息的主要方式是应用某种编程语言提供的类中成员方法的定义语法。请看下面代码中粗体的代码示例——Java类成员方法的定义语法示例。

公共类SomeOneClass{

公共对象someOneMethod{

//这里省略了方法体的实现代码。

}

//其他方法定义声明

}

在面向服务的软件系统架构下对每个服务组件接口的定义进一步完善了其内涵,包括服务的名称、服务被触发时的各种输入参数和预期输出结果、前置条件、后置条件、错误处理和服务质量保证等。

目前描述Web服务组件接口信息的主要方式是应用Web服务描述语言,它将Web服务定义为一组可以交换消息的通信端点。由于WSDL文件的表示仍然采用XML标准,这意味着它与Web服务功能组件的编程语言无关——开发人员可以应用C++、C#和Java等编程语言来开发和实现Web服务功能组件,降低了开发人员的学习成本。

因此,WSDL可以描述用不同编程语言实现的不同平台和Web服务的接口定义。下图所示的例子是软件应用系统中Web服务组件接口描述的WSDL代码例子的部分截图。

Web服务组件的外部接口必须独立于平台。

在面向服务的软件应用系统架构下,每个Web服务组件的接口必须是中立的,独立于实现服务的具体硬件平台、操作系统和编程语言平台——这就是为什么W3C已经采用XML作为Web服务组件技术实现的描述语言。只有这样的“独立接口”才能使在此架构下构建的所有功能服务组件以统一、通用的方式进行交互和通信——而Web服务描述语言可以满足这样的技术应用需求。

但读者要注意的是,正是因为Web服务的技术实现采用XML作为描述语言,而XML是文本格式,导致通信协议机制繁琐,依赖ESB总线的支持,降低了软件应用系统的性能,增加了系统开销。读者在应用Web服务组件时需要权衡利弊,合理选择和应用。

Java技术平台提供了对JAX WS和JAX RS的Web服务技术实现支持。

对于Java和J2EE技术平台下的应用系统,JAX-WS和JAX-RS可以用两种不同风格的Web服务技术实现。读者可以阅读作者在这一系列文章中发表的文章《软件项目培训和课程设计指南——为什么要应用和实现面向服务的系统架构设计》。在本文中,作者详细介绍了如何在JAX WS或JAX RS的软件应用系统项目中应用MyEclipse开发工具开发Web服务组件。

 
友情链接
鄂ICP备19019357号-22