写点什么

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

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

关注

评论

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

WAVE SUMMIT+2021深度学习开发者峰会举办,开源共建助力飞桨生态发展

科技热闻

【漫画】数据云,真香在哪?

星环科技

大数据

超细!细说Zookeeper选举的一个案例(上)

恒生LIGHT云社区

golang zookeeper Go 语言

AI 收藏夹 Vol.004:虚拟爱豆出道!

Zilliz

人工智能 神经网络 AI

“十四五”规划,开源重塑软件发展新生态,获国家重点扶持

腾源会

开源

Java Web开发之API Boy的进阶之路

@零度

Java web API boy

元气部落盲盒系统开发元气部落app开发

风行无疆

Linux 基金会发布 2021 年度报告,预测今年收入为 1.77 亿美元

腾源会

Linux 开源

重磅|腾讯云开源业界首个 etcd 一站式治理平台 Kstone

腾源会

开源 cncf Kstone

万字教你如何用 Python 实现线性规划

华为云开发者联盟

Python 函数 线性规划 求解器 单纯形法

联邦学习在光大科技的落地应用

博文视点Broadview

东汉末年,他们把「服务雪崩」玩到了极致

悟空聊架构

熔断 28天写作 服务雪崩 悟空聊架构 12月日更

未来企业如何应对人才之争

BeeWorks

神器来袭,手把手教你使用 Milvus_cli

Zilliz

数据库 命令行

Nebula Graph 源码解读系列 | Vol.06 MATCH 中变长 Pattern 的实现

NebulaGraph

图数据库 知识图谱 分布式图数据库

华为硬件配置命令,建议收藏

Ethereal

网络工程师 网络技术 华为设备 厂商设备 运维技术

资讯|WebRTC M95 更新

网易云信

WebRTC

中石化信息化数字化首席专家李剑峰:数字化转型中关键基础软件的国产化应用

OceanBase 数据库

开源 国产化 oceanbase 中石化

跟着动画学Go数据结构之插入排序

宇宙之一粟

golang 数据结构 插入排序 12月日更

前端开发之Vue框架的优势

@零度

前端开发 Vue优势

Android aapt 在 Mac 和 Windows 上使用方法小结

阿策小和尚

28天写作 Android 小菜鸟 12月日更

一文讲述数仓组件SysCache

华为云开发者联盟

事务 存储 GaussDB(DWS) SysCache 缓存信息

今夜无眠

Tiger

28天写作

解决rabbitmq消息队列的顺序及重复消费问题

编程江湖

大数据

给弟弟的信第15封|情绪控制的重要性

大菠萝

28天写作

PingCAP 入选 CB Insights 中国「数据链路安全领航者」榜单,保障全球用户存储安全

PingCAP

Java 集合框架面试问题集锦

编程江湖

面试题 JAVA开发 java编程

简述移动端IM开发的那些坑:架构设计、通信协议和客户端

BeeWorks

手写清除console的loader

编程江湖

前端开发

5G专网+区块链:构筑智慧政务“安全信任基石”

CECBC

从前端到全栈 -- 最全面向对象总结

程序员海军

Java 面向对象

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