写点什么

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:491335
用户头像

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

关注

评论

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

LeetCode题解:1238. 循环码排列,归纳法,详细注释

Lee Chen

JavaScript 算法 LeetCode

自媒体行业苦流量久矣,行业迫切需要整顿

石头IT视角

不到3天,省下近10万,低代码是真给老板省钱啊!

引迈信息

前端 敏捷开发 低代码

5G商业价值谜题:MWC 2023向世界揭开确定性答案

脑极体

5G

社区1月月报|OceanBase 4.1 即将发版,哪些功能将会更新?

OceanBase 数据库

数据库 oceanbase

掌握统计学,做选择时的纠结少一半!

图灵教育

R语言 统计学

一天梳理完React所有面试考察知识点

beifeng1996

前端 React

我如何看待爆火的 ChatGPT?| 社区征文

坚果

开源 ChatGPT

未来智安入选CCIA“网络安全服务阳光行动”成员单位

未来智安XDR SEC

网络安全

C++中的显式类型转换操作符总结

老王同学

c++

前端react面试题(边面边更)

beifeng1996

前端 React

一百行代码实现简易版 ChatGPT | 社区征文

海拥(haiyong.site)

ChatGPT

Go 语言推荐书籍(2023)

kcodez

golang go语言

将企业文件共享解决方案与数据丢失防护配对

镭速

认证培训 |【AIRIOT物联网平台应用与实战训练营】第二期火热报名中!

AIRIOT

物联网 培训 训练营 认证

2022新消费趋势洞察—中国独角兽的诞生、成长与发展

易观分析

经济 消费

为什么需要redolog与undolog

Dinfan

数据库

软件测试/测试开发 | Bug定位方法

测试人

软件测试 自动化测试 测试开发 bug定位

掌握统计学,做选择时的纠结少一半!

图灵社区

R语言 统计学

SREWorks前端低代码组件生态演进:monorepo架构重构和远程组件加载实践

阿里云大数据AI技术

大数据 运维 前端 低代码 企业号 2 月 PK 榜

inline函数的基本应用讨论

老王同学

c++ inline

一道React面试题把我整懵了

beifeng1996

前端 React

手写一个Redux,深入理解其原理-面试进阶

beifeng1996

前端 React

KCL v0.4.5 发布 - 更好的编写便利性改进,稳定性,体验提升与多平台支持

Peefy

开源 DevOps 云原生 编程语言 ​Rust

架构实战营-模块1作业

sadhu

慧销平台ThreadPoolExecutor内存泄漏分析

京东科技开发者

线程 内存 内存泄漏 ThreadPoolExecutor tread

hive etl 通过 ETL 导出 Hive 中的数据

weigeonlyyou

hadoop hive Hive SQL hadoo Kafka ETL

字节前端一面经典react面试题及答案

beifeng1996

前端 React

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