热门标签 | 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文件。


推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
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社区 版权所有