在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

QT exe只允许运行单个

小肉球

qt 7月月更

Qt | 模态对话框和非模态对话框 QDialog

YOLO.

qt 7月月更

mysql进阶(十七)Cannot Connect to Database Server问题分析

No Silver Bullet

MySQL 数据库 7月月更

开幕在即 | “万物互联,使能千行百业”2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛

OpenHarmony开发者

OpenHarmony

NFT卡牌链游系统Dapp开发搭建

薇電13242772558

NFT 链游

面试突击67:说一下 TCP/IP 协议?以及每层的作用?

王磊

Java 面试

LeetCode-88. 合并两个有序数组(java)

bug菌

Leet Code 7月月更

C# 窗体应用DataGridView,使用数据库(Sql和MySQl)对DataGridView绑定数据源,获取数据

IC00

C# 7月月更

在 Kyma 云原生平台上开发并部署 Node.js 应用

汪子熙

Kubernetes 云原生 SAP Kyma 7月月更

NFT数字藏品系统搭建—app开发

开源直播系统源码

软件开发 数字藏品 NFT数字藏品系统

面向高性能计算场景的存储系统解决方案

Baidu AICLOUD

异构计算 云原生存储 AI加速

如何做好研发精益需求管理

思码逸研发效能

研发管理 研发效能 科技

java零基础入门-java8新特性(上篇)

喵手

Java 7月月更

敏捷 ? DevOps ?

FunTester

算法题每日一练---第5天:星系炸弹

知心宝贝

算法 前端 后端 7月月更

C#入门系列(二十七) -- LINQ简析

陈言必行

7月月更

干货分享-作为Lead 接手一个新的数据团队一 问题盘点 与Insights的发现

金松(李博源)

经验分享 数据分析师 成长笔记 带团队

NFT挖矿分红系统开发模式定制

开发微hkkf5566

Elephant Swap的LaaS方案迅速崛起,构建全新DeFi2.0协议

鳄鱼视界

Qt|编辑框的使用总结

中国好公民st

qt 7月月更

Android 开发遇到的Exception

沃德

android 7月月更

优博讯助力深圳打造全球“鸿蒙欧拉之城”

极客天地

SENSORO 付刘伟:创新技术服务为基层政府筑造数字底座

SENSORO

人工智能 大数据 物联网 城市大脑 数字政府

strncpy() 复制字符串(受长度限制)

謓泽

7月月更

关于数据产品经理的三个小的知识点

金松(李博源)

数据中台 数据产品经理 数据产品

JAVA编程规范之日志规约

源字节1号

后端技术

TIME的新封面:元宇宙将改变一切

智捷云

元宇宙 Metaverse 智捷云 智捷云科技

CSS 炫酷文本过渡动画

南城FE

CSS css3 前端 7月月更

Prometheus 2.37.0 新特性

耳东@Erdong

release Prometheus 7月月更

云原生(十) | Kubernetes篇之Kubernetes简介

Lansonli

云原生 k8s 7月月更

STM32+ESP8266+MQTT协议连接OneNet物联网平台

DS小龙哥

7月月更

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