QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

外贸独立站如何SEO优化推广?

九凌网络

杭绍甬高速杭绍段等浙3条高速通车,三思再树标杆工程。

电子信息发烧客

高效工作必备神器:这款在线软件能完美替代Visio!

彭宏豪95

在线白板 办公软件 绘图工具 效率软件 Visio

左耳听风 - 分布式架构「读书打卡 day 14」

Java 工程师蔡姬

读书笔记 程序员 个人成长 分布式 职业发展

电商平台接口自动化测试框架设计与实现

技术冰糖葫芦

API

动态规划-序列比对-最长公共子序列

alexgaoyh

Java 编辑距离 最长公共子序列 Smith-Waterman 序列对比

二、nextjs API路由如何做好JWT登录鉴权、身份鉴权,joi字段校验,全局处理异常等(c-shopping电商开源)

Geek_9da61c

开源 JWT next.js joi

2023 IoTDB Summit:中核武汉核电运行技术股份有限公司主管工程师方华建《IoTDB 在核电数字化转型过程中的应用实践》

Apache IoTDB

秒级弹性!探索弹性调度与虚拟节点如何迅速响应瞬时算力需求?

阿里巴巴云原生

阿里云 云原生 弹性调度

百度智能云千帆AppBuilder新手指南

AI大咚咚

AI API LLM AI原生应用

《Java核心编程》PDF

程序员李木子

惊为天人!这个保存推特视频到手机相册的办法真的一绝!

frank

twitter

基于 pytorch-openpose 实现 “多目标” 人体姿态估计

北桥苏

Python OpenCV PyTorch MediaPipe Pytorch-OpenPose

i人事2023:在不确定性的年份做正确的事情

ToB行业头条

一种快速开发适配鸿蒙的App思路:基于小程序技术

FinFish

鸿蒙操作系统 小程序容器 小程序技术 鸿蒙Next 鸿蒙5.0

聚道云连接器:实现航信费控与用友NCC对接,助力某商贸集团业务升级

聚道云软件连接器

案例分享

元宇宙技术对于虚拟仿真应用的一些帮助

3DCAT实时渲染

虚拟仿真 元宇宙 元宇宙解决方案

写作,写作,先写后作

zhumingwu

小红书多模态团队建立新「扩散模型」:解码脑电波,高清还原人眼所见

小红书技术REDtech

CV 计算机视觉 脑机接口 扩散模型 AAAI

听GPT 讲Rust源代码--compiler(28)

fliter

实现定时任务的六种策略

不在线第一只蜗牛

前端 定时任务 开发

C# Break 和 Continue 语句以及数组详解

小万哥

C# 程序人生 编程语言 软件工程 后端开发

《凤凰架构:构建可靠的大型分布式系统》PDF

程序员李木子

钉钉飞书的AI大战,一场繁花还是一地鸡毛?

脑极体

AI

Yuliverse:引领区块链游戏新篇章!

Footprint Analytics

区块链游戏 元宇宙 链游 Web3 游戏

SpringBoot3集成Zookeeper

Java 架构 SpringBoot3 Zookeeper3.8 Curator5.5

一个例子形象地理解同步与异步

EquatorCoco

Java 前端 异步 同步

如果查看iPhone的GPU

雪奈椰子

定向减免!函数计算让 ETL 数据加工更简单

Serverless Devs

容器 云原生 中间件 函数计算 函数计算FC

一文搞清楚Java中的包、类、接口

不在线第一只蜗牛

Java 前端 开发

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