NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Web Service 同样需要系统化的设计模式

  • 2007-09-08
  • 本文字数:1150 字

    阅读完需:约 4 分钟

最近《Pattern-Oriented Software Architecture》出版了 4、5 卷,联想到现在正快速发展的 Web 服务建设,他们同样也进入到系统化设计、实施的阶段,也到了该应用模式化设计的阶段。设计模式不仅是方法论,很多时候也是实现技巧、代码重构设计思路、解决方案等。Web 服务与 GOF23 提到的面向对象设计模式本身有很大差距,因为它提供的是基于 WSDL 的一个个 API,也就是说它是“平”的,没有所谓的继承关系。

现阶段 Web 服务更多的被架构师设计为应用的“一张皮”,即便这样经过近几年数量众多的 Web 服务建设,它还是形成了很多固定的模式(为了区别于经典的模式名称,这里每个模式名称前都增加了一个“Service”):

l Service Facade:Web 服务是平台、开发语言无关的,那么为了实现无关那就需要把原有的资源包装好,这个意义上讲,Web 服务天生就有很朴素的 Facade 特性;

l Service Adapter:Web 服务间的调用越来越普遍,尤其在互操作或者与合作伙伴 Web 服务交互的过程中,如何使不同 Service Endpoint 互联本质上也是 WSDL 与 WSDL 接口间的交互,概念上适配器就是很不错的选择;

l Service DTO(Data Transfer Object):Web 服务的调用是相对很昂贵的,但客户程序很少有机会决定服务端的接口颗粒度,如果对方颗粒度很小,但自己需要的数据本身就很粗,那么如何将多次调用打包成一个,DTO 就是不错的选择;

l Service Observer:既然架构上 Web 服务被定义为 SOA 环境的普遍技术,那么设计上也更需要面向客户,无论是最终客户应用、人还是客户 Web 服务,很多情况下都需要异步根据既定内容提供消息,Observer 这时候就很有用武之地,进一步还可以扩展为 Service Subscriber / Publisher;

l Service Visitor:虽然现在绝大多数企业内 Web 服务还远没有达到形成双因素依赖的程度,但很多协作方 Web 服务间已经形成了很多基于“服务——请求”链条的双因素依赖关系,当两个服务之间“拆解”有问题的时候,恐怕就是“外来和尚好念经”了,Visitor 是个不错的思路;

l … …

概念上应用这些模式很清晰,但实现上要求架构师有几个“坎”必须跨越:

l 首先,实现上述模式的基础是解决 Web 服务依赖倒置的问题,虽然 WSDL 很好的描述了 Web 服务接口部分的抽象,但服务实体本身必须增加一个抽象逻辑层适配 WSDL 的描述,否则 WSDL 与 Web 服务实体间还是 1:1 的紧密耦合,想通过模式玩点“花样”很难;

l 其次是参数、消息内容上必须(起码是强烈建议)采用 XML 家族的技术,XSD、XSLT、XML 数据访问技术(Xpath / XQuery)等;

l 然后,标准化是时时要考虑的问题,设计模式没有提到版本问题,但 Web 服务发展的太快,为了更好的把他们服务化,供其它客户程序使用,不仅要设计上有好的规划,实现上也要处处留意标准化,因为很多时候要靠相关标准的兼容性保证自己 Web 服务的兼容性。

2007-09-08 19:49768
用户头像

发布了 61 篇内容, 共 96616 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

重磅发布 | 博睿数据发布互联网行业精选案例集

博睿数据

互联网 可观测性 博睿数据 One 精选案例

参展有礼|华秋电子诚邀您参加2023慕尼黑上海电子展

华秋电子

保姆级教程:带你体验华为云测试计划CodeArts TestPlan

华为云PaaS服务小智

云计算 开发者 软件开发 华为云

我在中小型项目SuperCell模式实战经验

软件工程师-罗小东

教你如何用Vue3搭配Spring Framework

华为云开发者联盟

前端 开发 华为云 华为云开发者联盟 企业号 6

一文吃透MAUI、WinUI3和WPF的优势及劣势

这我可不懂

WPF MAUI

会是调用第三方接口那么简单吗?

高端章鱼哥

程序员 前端 接口 系统

es 笔记二之基础查询

Hunter熊

elasticsearch

为什么负数的补码等于反码加一

xzy

HTML5 游戏开发实战 | 俄罗斯方块

TiAmo

html html5 6 月 优质更文活动

未来已来!探索AI医疗与低代码开发平台:引领健康浪潮的科技巨潮

不在线第一只蜗牛

人工智能 医疗健康领域 AI医疗

IPQ6010 QCA8075 QCN5052 QCN5022 WiFi Embedded Motherboard

wifi6module

IPQ6000 ipq4029

人脸识别技术在智慧城市建设中的应用

来自四九城儿

软件测试/测试开发丨接口测试学习笔记分享

测试人

Python 程序员 软件测试 接口测试 Mock

《巫师》系列游戏及《赛博朋克2077》本地化总监 Mikołaj Szwed 将出席 2023 中国游戏开发者大会(CGDC)

CGDC中国游戏开发者大会

本地化 游戏开发 ChinaJoy

筑牢三大新型能源基础设施,能源变革的分水岭和路线图

脑极体

新能源

神级外挂 | 网络性能优化,2个补丁就足够

鼎道智联

人脸识别技术的分类和实现方法

来自四九城儿

让沉寂的数据“活”起来,用友BIP资产云提升港口企业决策效率

用友BIP

港口 资产云

数智时代的守护者:低代码开发平台如何解决AI安全挑战?

快乐非自愿限量之名

AI 低代码 数智时代

人脸识别技术的未来发展方向

来自四九城儿

九章云极DataCanvas公司加入中国移动信息现代产业链“十百千万”计划

九章云极DataCanvas

Spring Cloud 如何引入云原生网关,创新微服务架构

阿里巴巴云原生

阿里云 微服务 云原生 Higress

保险业务连续性保障:从测试到生产,混沌平台建设节奏如何把控?

TakinTalks稳定性社区

C++实现简单的ls命令以及原理

智趣匠

代码随想录训练营 Day02 - 数组(下)

jjn0703

算法

我为什么选择多边形架构做为工程的基础思想

软件工程师-罗小东

【汽车虚拟仿真】VR技术如何加速自动驾驶进程?

3DCAT实时渲染

虚拟仿真 云仿真 汽车虚拟仿真

倒计时1天 | 诚邀见证“九章云极DataCanvas新产品发布会”!

九章云极DataCanvas

起风了,泛娱乐企业出海如何正确扬帆?

ToB行业头条

通过构建背景图学习CSS径向渐变

南城FE

CSS 前端开发 渐变

Web Service同样需要系统化的设计模式_架构_王翔_InfoQ精选文章