热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SOA设计原则和Web服务中的数据传输

SOA被翻译为面向服务架构,它应该是创建从自治服务生成系统的一个架构方法,它的目的是更方便地进行集成。SOA是Web服务的一个自然延伸,因为Web服务只是解决了异构系统之间的互操作,并没有降低W

SOA 被翻译为面向服务架构,它应该是创建从自治服务生成系统的一个架构方法,它的目的是更方便地进行集成。
SOA是Web 服务的一个自然延伸,因为Web 服务只是解决了异构系统之间的互操作,并没有降低Web 服务之间的耦合度。
而关于SOA,有太多关于这个名词的阐述和其他新鲜名词:SCA、SDO、ESB等,本文要讨论的是什么是服务、面向服务架构的设计原则和Web 服务中的数据传输。

什么是服务?
简单来说就是一个提供消息交换交互、满足特定功能的程序而已。它具有可用性和稳定性,同时也是松耦合的。服务长期存在,但是服务的配置和聚合必须能适应变化。

如何设计服务?
无他,把 OO 设计准则拿到 Web 服务领域而已,John Evdemon 在这篇文章(http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/SOADesign.asp)里面谈到SOA的设计原则,中文在这里(http://www.microsoft.com/china/msdn/library/architecture/architecture/architecturetopic/SOADesign.mspx)。
有以下四个设计原则:
一:边界清楚(Boundaries Are Explicit)
 通过WSDL发布服务协定(流程和数据形式)、使用消息传递而不是RPC调用、提供结构良好的公共接口并保持静态。
二: 自治(Services Are Autonomous)
 服务的部署和版本变迁应该要独立于服务的部署和使用者、服务发布后接口即不可更改,做为服务提供者,要预料到服务有可能被误用或者服务的使用者出现问题。
三: 共享架构和协定而非类(Services Share Schema and Contract, Not Class)
 采用 XML 架构定义消息交换格式、采用 WSDL 定义消息交换模式、采用 Web 服务策略(WS-Policy) 定义功能和需求、采用BPEL(Business Process Execution Language,业务流程执行语言)做为业务流程级别的协定,以聚合多个服务。  
四: 服务兼容性基于策略(Service Compatibility Is Based Upon Policy)
 策略表达式可用于分隔化兼容性性和语义兼容性。WS-Policy 规范定义了一个能够表达服务级策略的机器可读的策略框架。关于WS-Policy的介绍,请参见:http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-policy.asp
 中文在这里(http://www.microsoft.com/china/MSDN/library/WebServices/WebServices/Usdnglobspecwspolicy.mspx)
 
采用何种格式在 Web 服务中传输数据?
 在选择传递数据所使用的机制上,有以下几种方法可供选择:DataSet、类型化DataSet、自定义集合、普通 XML 文件
 类型化DataSet只是在通用DataSet上增加了一些附加功能,还应该属于DataSet,可以被认为是一种格式。
 DataSet:
 使用它的理由有:可以把任何数据源的数据整合在一起进行传递;
 支持序列化,可以方便地和文本流进行转换;在.NET 2.0 中,连DataTable都开始支持序列化;
 在.NET中对DataSet进行操作也比较简便,开发工作量也比较小。
 而不应该在Web服务中采用DataSet的理由是:
 Web服务的设计目的是用来解决异构系统之间的数据通信问题的,数据就是以消息的形式在服务之间进行传递。而将一个其它服务或系统无法理解的DataSet放在Web服务中传输,是否已经违背了Web服务设计时的初衷?
 题外话:.NET 2.0 中增加了SerializationFormat.Binary,是否助长了这种风潮?是否有更多的开发者在应该使用.NET Remoting的场合“过度使用”了Web服务?
 直接使用DataSet的WriteXML方法和ReadXML方法来转换XML不采用其它措施的话,XML文件中会包含大量的架构信息,占用了宝贵的带宽资源;
 
 自定义集合:
 最大限度的支持自定义,可解决DataSet的隐式数据转换和效率问题,但是需要额外的代码来实现数据的访问并需要实现ISerializable接口来支持序列化,可能开发的工作量是最大的。
 
 普通XML文件:
 可以直接进行传输,需要编写解析程序将数据提取出来。
 
 如果使用Web服务的目的仅仅是为了穿透防火墙,不考虑异构系统直接的通讯的话,采用DataSet可能是比较好的方案。
 如果性能是首先要考虑的问题,应该会采用自定义集合。
 如果异构系统之间通讯的话,肯定应该采用普通XML文件。


推荐阅读
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
author-avatar
法国警方解放军_847
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有