您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 基于面向服务体系架构(SOA)和面向资源体系架构(ROA)的业务组件模型
基于面向服务体系架构(SOA)和面向资源体系架构(ROA)的业务组件模型多终端多技术平台可复用的组件模型引言在《面向服务体系架构(SOA)和业务组件(BC)的思考》(以下简称《SOA和BC》)一文中介绍了基于面向服务体系架构(SOA)的组件模型,本文按照“分离”的原则,通过比较当前多种流行的客户端和服务器端的通讯机制,进一步把业务组件进行分离,采用面向资源体系架构(ROA)把业务组件界面层和业务逻辑层分离开,构建一个多终端多技术平台可复用的组件模型多层架构中的通讯方式软件体系架构是沿着单机到CS架构,再到BS的三层架构甚至多层架构逐步发展过来的,关于多层架构,本文不再详细介绍,可以参考相关的资料,下面首先来分析一下当前比较流行的客户端技术以及客户端和服务器之间的通讯方式。基于MVC的J2EE多层模型在一个标准的基于MVC的J2EE的模型架构的代码中,从对象的类别来看,一般包含BO、DAO、POJO等Java类,另外还包含JSP、Servlet等,如下图所示:图1.基于MVC的J2EE多层模型POJO:简单Java对象(PlainOrdinaryJavaObject,POJO),一个中间对象,在不同阶段可以转化为PO、DTO、VO,POJO持久化以后就是PO,在应用中的不同层次传递为DTO,直接用来对应表示层就是VO。PO:持久对象(PersistantObject,PO),也称为Data对象,对应数据库中的Entity,可以简单认为一个PO对应数据库中的一条记录。PO中不包含任何对数据库的操作。VO:表现层对象(ViewObject,VO)主要对应界面显示的数据对象。对于一个WEB页面,或者SWT、SWING界面,用一个VO对象对应整个界面的值。根据业务的需要可以和表对应,也可以不对应。DTO:数据传输对象(DataTransferObject,DTO)主要用于远程调用等需要大量传输对象的地方。对象不应该包含业务逻辑,其仅仅需要传递需要的属性,而不是PO的所有属性。BO:业务对象(BusinessObject,BO)主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。通常一个BO包含多个PO,通常需要将BO转化成PO,才能进行数据的持久化,反之,从DB中得到的PO,需要转化成BO才能在业务层使用。BO建议只包含业务方法,属性在POJO中。DAO:数据访问对象(DataAccessObject,DAO)主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO。主要用来封装对DB的访问,把POJO持久化为PO。JSP是通过HTTP请求,直接调用Servlet的。当前,在J2EE架构下,有Struts、Spring、Hibernate等开源架构完美的实现了界面、逻辑和实例化的操作。Applet和J2EE的通讯Applet可以直接连接数据库,可以使用象JDBC、RMI这样的协议来访问象数据库、LDAP目录和EnterpriseJavaBeans组件这样的后端信息。也可以通过HTTP连接后台的JavaServlet,和JSP连接方式相同,通过Servlet处理后台逻辑,Applet仅仅用来处理前端的工作。Flex和J2EE的通讯Flex是Macromedia发布的展现服务(PresentationServer),根据mxml文件(纯粹的XML描述文件和ActionScript)产生相应得swf文件,传送到客户端,由客户端的解释执行。Flex提供了三种方式和Java进行数据交互:HTTPService,RemoteObject和Web服务。其中,HTTPService方式可以传输Text、XML或者JSON(JavaScriptObjectNotation)等。由于Flex具有Flash打下的良好用户基础,同时具有丰富的展现效果,正在成为一种流行的客户端展示实现技术。AJAX和J2EE的通讯AJAX(AsynchronousJavaScriptandXML)是多种技术的综合,它使用XHTML和CSS标准化呈现,使用DOM实现动态显示和交互,使用XML和XSTL进行数据交换与处理,使用Javascript绑定和处理所有数据,Javascript是一种粘合剂使AJAX应用的各部分集成在一起,中JavaScript主要被用来传递用户界面上的数据到服务端并返回结果。AJAX使用XMLHttpRequest对象进行异步数据读取,XMLHttpRequest对象用来响应通过HTTP传递的数据,一旦数据返回到客户端就可以立刻使用DOM将数据放到网面上。在Ajax中,XMLHttpRequest是核心,XMLHttpRequest对象在大部分浏览器上已经实现而且拥有一个简单的接口允许数据从客户端传递到服务端,但并不会打断用户当前的操作。使用XMLHttpRequest传送的数据可以是任何格式,包括可以传输Text、XML或者JSON。其他客户端和J2EE的通讯除了前文所描述常见的浏览器支持的技术标准,当前富客户端(RichInternetApplications,RIA)发展也很快,比较流行的有AIR、WPF、JavaFX等。AIR(AdobeIntegratedRuntime)是Macromedia发布一个跨操作系统运行的RIA技术解决方案,利用现有的Web开发技术(Flash,Flex,HTML,JavaScript,Ajax)来构建富客户端,并部署为桌面应用程序,其本质上采用的是前述Web开发技术和后台通讯。由于AIR可以访问客户端的资源,并可以实现离线操作,所有具有广阔的应用前景。WPF(WindowsPresentationFoundation)是Microsoft的.Net平台的RIA技术解决方案,WPF通过扩展应用程序标记语言(eXtensibleApplicationMarkupLanguage,XAML)把界面和业务逻辑分开,以开发出界面炫丽,功能强大的应用程序。WPF可以通过基于SOAP的Web服务或者RESTfulWeb服务跟后台J2EE服务器交互。另外轻量级的基于浏览器的Silverlight可以采用这种技术。JavaFX是Java的RIA技术解决方案,和早期的Applet、JavaWebStart等技术一脉相承,其使用的是领域专用语言(DomainSpecificLanguage,DSL),和后台通讯方式同Applet。通讯方式总结如前文所述,客户端和服务器端的通信有很多种,但是有两种是都支持的,基于SOAP的Web服务和RESTfulWeb服务。Web服务是通过简单对象访问协议(SimpleObjectAccessProtocol,SOAP)传输的,SOAP是一种基于XML的协议,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME),基于“通用”传输协议是SOAP的一个优点。它还支持从消息系统到远程过程调用(RemoteProcedureCall,RPC)等大量的应用程序。SOAP提供了一系列的标准,如WSRM(WS-ReliableMessaging)形式化契约确保可靠性与安全性,确保异步处理与调用;WS-Security、WS-Transactions和WS-Coordination等标准提供了上下文信息与对话状态管理。相对而言,SOAP协议属于复杂的、重量级的协议,当前随着Web2.0的兴起,表述性状态转移(RepresentationalStateTransfer,REST)逐步成为一个流行的架构风格。REST是一种轻量级的WebService架构风格,其实现和操作比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法,这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST架构尤其适用于完全无状态的CRUD(Create、Read、Update、Delete,创建、读取、更新、删除)操作。基于REST的软件体系结构风格(SoftwareArchitectureStyle)称之为面向资源体系架构(Resource-orientedArchitecture,ROA)。按照REST原则设计的软件、体系结构,通常被称为“REST式的”(RESTful),在本文中以下称之为RESTfulWeb服务,以便于和基于SOAP的Web服务区别。服务器端采用J2EE,客户端采用JSP、Flex、JavaFX、AIR等可以直接调用Servlet,其他的实现技术基本上不能直接调用,但是无论是那种客户端,对于基于SOAP的Web服务或者基于RESTfulWeb服务务都是支持的,如AJAX的XMLHttpRequest、Flex的HTTPService等。如下图所示:图2.客户端和服务器端的通讯方式基于SOAP和REST的分层模型结合前文所述客户端和服务器端的通讯方式比较和分析以及在《SOA和BC》一文中描述的业务组件模型,下文给出了在界面层和业务逻辑层采用轻量级的RESTfulWeb服务,不同业务组件之间采用基于SOAP的Web服务的业务组件模型。基于ROA的业务组件界面层和业务逻辑层接口在多层架构下,特别是当前客户端技术发展迅速,有不同的技术实现方式,将界面层和业务逻辑层分离将能更好的实现业务组件的重用,业务逻辑不受不同客户端技术技术影响,从而更好的保证了业务逻辑的重用。为了支持各种客户端技术,需要采用各种客户端技术都能支持的标准的接口方式,在前文所述两种通用标准中,SOAP相对来讲属于重量级协议,而且基于SOAP的Web服务将会增加软件开发的难度,影响系统的性能,因此采用轻量级的RESTfulWeb服务务,来实现界面层和业务逻辑层的分离,如下图所示:图3.界面层和业务逻辑层的通信模式为了保持和基于SOAP的Web服务方式传输的内容一致,其传输的数据格式均采用标准的XML,比如传递一个客户信息,基于SOAP的Web服务传递的参数和RESTfulWeb服务格式分别如下:清单1.XML样例?xmlversion=1.0encoding=gb2312?CUSTOMERORG_CODE1000/ORG_CODECUST_CODE100010001/CUST_CODECUST_NAME张三/CUST_NAMECUST_TYPE_CODE11/CUST_TYPE_CODECUST_STATUS01/CUST_STATUS/CUSTOMER这样不管是通过基于SOAP的Web服务和和基于REST的XML,在业务逻辑层,可以通用一个toString方法,转换成一个XML文件就可以了。最终是采用SOAP的Web服务还是RESTfulWeb服务,只是通过配置输出不同的协议就可以了。Axis2可以很好的支持这个架构,Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了RESTfulWeb服务,同时还支持Spring、JSON等技术。清单2.生成XML代码示例publicStringtoString(){StringstrXML=””;······;if(null!=orgCode){sb.append(ORG_CODE);sb.append(orgCode);sb.append(/ORG_CODE);}if(null!=custCode){sb.append(CUST_CODE);sb.append(custCode);sb.append(/CUST_CODE);}······;returnstrXML;}
本文标题:基于面向服务体系架构(SOA)和面向资源体系架构(ROA)的业务组件模型
链接地址:https://www.777doc.com/doc-1589177 .html