写点什么

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

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

关注

评论

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

九面成功定级阿里资深架构师,拿到180W年薪+15000股,学习一下大神的成长之路!

Java架构追梦

Java 学习 架构 面试 微服务

MySQL-技术专题-事务实现原理

码界西柚

Github资源在线加速下载

xcbeyond

GitHub 工具类网站

字节跳动总结的这份《Java设计模式(实战+源码)》PDF突然火了,完整版免费开放下载!

Java架构之路

Java 程序员 字节跳动 编程语言 设计模式

对象的实例化内存布局与访问定位

朱华

Java 对象初始化

滴滴导航若干关键功能的技术突破与实践

滴滴技术

人工智能 滴滴技术 滴滴导航

Java 未捕获异常处理

朱华

Java Exception

四面阿里成功定级P6,想和Java程序员谈一谈

Java架构之路

Java 程序员 面试 编程语言

解密360容器云平台的Harbor高可用方案

博文视点Broadview

容器 高可用 云原生 k8s Harbor

关于GO语言,这篇文章讲的很明白

华为云开发者联盟

编程语言 语言 Go 语言

链表反转的两种实现方法,后一种击败了100%的用户

小Q

Java 程序员 数据结构 算法 开发

《谛听说智能》迎来圆满落幕,企业降本增效新指南

Geek_e670ab

MySQL-技术专题-存储引擎详解

码界西柚

水滴石穿之Java学习之路

价投小邱

Java 学习 后端

Minds Factory 2020 HUAWEI HiCar 创新活动

Jessie

物联网 创新 智能 汽车 大赛

LeetCode题解:83. 删除排序链表中的重复元素,HashMap,JavaScript,详细注释

Lee Chen

大前端 LeetCode

违规内容屡屡曝光下,企业如何自救

Geek_e670ab

MySQL-技术专题-解决死锁问题

码界西柚

c++笔记——类

菜鸟小sailor 🐕

c++

Aspose.pdf破解全程记录

janux

技术分享丨华为鲲鹏架构Redis知识二三事

华为云开发者联盟

redis 鲲鹏

伯克利:serverless是下一代计算范式

华为云开发者联盟

云计算 服务

链表反转的两种实现方法,后一种击败了100%的用户!

王磊

Java 数据结构 算法

Spring Cloud 微服务实践(8) - 部署

xiaoboey

Docker zookeeper 微服务 Spring Cloud actuator

看这里!带你快速体验MindSpore V1.0(For ubuntu 18.04)

华为云开发者联盟

华为 AI 技术

使用 Flutter 快速实现聊天应用

LeanCloud

flutter 后端 聊天

DB-Engines 10月数据库排名:“三大王”无人能敌,PostgreSQL紧随其后

华章IT

数据库 postgresql Clickhouse MySQ

英特尔为北京2022年冬奥会打造智慧新体验

E科讯

程序员的美丽假期(并不)

Learun

程序员 敏捷开发 软件设计

不走寻常路

滴滴技术

招聘 滴滴技术 地图与公交事业群分享月

MySQL-技术专题-mysql的联合索引

码界西柚

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