写点什么

SOA 设计关乎契约还是服务实现?

  • 2010-02-11
  • 本文字数:924 字

    阅读完需:约 3 分钟

大量的出版物都在描述 SOA 实现的设计,但却对接口(契约)设计鲜有关注,这让人不由得产生一种“实现的设计更重要而且更值得关注”的感觉。对此的一个常见理由是契约会随着时间改变,预先把过多的时间花在它们的定义上跟敏捷开发方法相抵触。

Steve Jones 在他最近的贴子里对这一普遍误解提出了异议,说道:

在我看来,这种看法就像那种不愿意写文档的伪敏捷人士,他们根本就是狗屁不通,而不是因为他们已经开发出了具备自描述能力的质量极高的组件。这基本上就是在说任何人都要等到系统可运行了之后你才能知道它的功能。这等于让需求改变适应实现。我现在并不是说需求不能改变,也不是鼓吹瀑布模型,而想说明 SOA 编程中的时间分配问题:在确定规格说明和设计过程中,大部分时间应该花在服务间的契约和交互上,至于关注如何设计这些服务满足契约,则可以少花些时间。

为什么契约是 SOA 实现中的最重要部分,Steve 列举了以下原因:

  1. 其他组件依赖的是契约而不是设计。因其错误而导致的成本跟提供者的数量成指数关系。一旦契约正确就位,那么人们就可以并行开发,这可以大大加速交付时间,减少风险。
  2. 测试是围绕契约而不是设计进行的。契约是正式的规格说明,设计必须满足它,而且各种形式的测试也都应该使用它。
  3. 设计可以在契约的边界内悄悄地改变。

契约的重要性这一概念并不是新鲜事物。按照 Dimuthu Leelarathne 的说法:

如果你没有首先设计服务间的契约,服务间复杂的集成问题就会出现。

实际上,创建好的服务契约并不是件易事,要求很好地理解契约核心业务。虽然已有一些服务接口设计的公认方法,但是更多的时候它还是艺术而非科学。结果,开发者和软件厂商都典型地把注意力放在了他们受到的培训(和要卖的东西)上——服务实现的设计和编码。在 Steve 看来:

……IT 的重点……太少地放在了确保外部接口至少在一段时间内保持正确的上面。契约可以演变,我有意地使用了这个术语,但大多数时候,旧的契约在人们迁移到新版本的过程中还要被支持。这意味着契约比设计拥有的生命跨度要长得多……契约是大事,设计则微不足道。

随着我们继续提倡将 SOA 用于业务/IT 对齐,与业务需求对齐的服务契约的作用会越来越明显。

查看英文原文: SOA Design: Is it about Contracts or Service Implementation?

2010-02-11 02:171534
用户头像

发布了 255 篇内容, 共 63.6 次阅读, 收获喜欢 10 次。

关注

评论

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

Vue之全局事件总线和消息订阅与发布

编程江湖

前端开发

龙蜥社区一周动态 | 12.06-12.10

OpenAnolis小助手

龙蜥社区

基于JSX的全新BDD工具 - Crius

RingCentral铃盛

Android C++系列:Linux Socket编程(二)网络套接字函数

轻口味

28天写作 Android; 12月日更

iOS 开发者福音:iOS 项目也能支持 MQTT 5.0 啦!

EMQ映云科技

ios mqtt emq tvos osx

在线JSON转flow工具

入门小站

工具

纯 Git 实现前端 CI/CD

杨成功

架构 前端 CI/CD 签约计划第二季

❤️使用 HTML、CSS 和 JS 创建在线音乐播放器(免费送完整源码)❤️

海拥(haiyong.site)

响应式 大前端 28天写作 签约计划第二季 12月日更

阿里巴巴、埃森哲、德勤三方圆桌对话——《与数字化先锋共绘创新蓝图》

大咖说

阿里巴巴 大咖说 数字经济 数智化

使用 scipy.fft 进行Fourier Transform:Python 信号处理

华为云开发者联盟

Python 音频 信号处理 傅立叶变换 Fourier transform

观测云高分通过等保三级认证,信息安全体系建设领先行业

观测云

解析WeNet云端推理部署代码

华为云开发者联盟

gRPC 语音 PyTorch ASR WeNet

JavaMoney规范(JSR 354)与对应实现解读

vivo互联网技术

Java、 API 虚拟化 虚拟货币

Linux一学就会之LVM管理和SSM存储管理器使用

学神来啦

Linux centos 运维 lvm linux云计算

前端开发之cypress的自动化实践

@零度

前端 Cypress

源码超度:String、StringBuffer、StringBuilder

无心水

StringBuilder StringBuffer String字符串

OPPO云VPC网络实践

安第斯智能云

云计算 SDN架构 智能网卡vpc

在中国如何打造一个有生命力的开源项目?

Jianmu

DevOps 持续集成 CI/CD 开源社区 持续部署

云原生时代,领域驱动设计思想(DDD)如何落地?

华为云开发者联盟

软件架构 架构设计 建模 领域驱动设计思想 领域模型

我也想说说日志,但是我不想说漏洞。

why技术

【SpringCloud技术专题】「Gateway网关系列」(1)微服务网关服务的Gateway组件的原理介绍分析

码界西柚

Spring Cloud api 网关 SpringCloud Gateway API Gateway 12月日更

深入浅出 Java 中枚举的实现原理

恒生LIGHT云社区

Java 编程语言 枚举

百度搜索中“鱼龙混杂”的加盟信息,如何靠AI 解决?

百度Geek说

架构 AI 后端 百度搜索

dart系列之:安全看我,dart中的安全特性null safety

程序那些事

flutter dart 程序那些事 12月日更 flutter 调试工具

「可观测产品首发」观测云免费版正式上线!开箱即用,观测无限

观测云

拥抱开源,共建生态!观测云 DataFlux-Func 代码全部开源

观测云

Linux之rm命令

入门小站

Linux

前端架构师的 git 功力,你有几成火候?

杨成功

git 架构师 GitFlow git 规范 签约计划第二季

13. 《重学 JAVA》-- 抽象类和接口

杨鹏Geek

Java 25 周年 28天写作 12月日更

存储空间降为原来的1/7,TDengine在中移物联网轨迹数据存储中的应用

TDengine

数据库 tdengine 时序数据库

大数据开发之数仓工具Hive(一)

@零度

大数据 hive 数仓工具

SOA设计关乎契约还是服务实现?_SOA_Boris Lublinsky_InfoQ精选文章