写点什么

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

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

关注

评论

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

华为云桌面,助力云上工作,让云上工作更高效!

秃头也爱科技

一文熟悉 Go 的分支结构(if - else-if - else、switch)

陈明勇

Go golang Switch if 11月月更

Linux 用户和用户组管理

芯动大师

11月月更 Linux系统 用户组

【Python 基础学习】-列表

度假的小鱼

11月月更 python列表

云原生基础组件选型出发点

穿过生命散发芬芳

11月月更 云原生落地

C++---类型萃取---is_array && is_enum/is_union/is_class

桑榆

C++ STL 11月月更

python数据分析-pandas基础3-数据对齐

AIWeker

Python Python数据分析 11月月更

python小知识-hook函数

AIWeker

Python python小知识 11月月更

2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是

福大大架构师每日一题

算法 rust 福大大

支持向量机-选取与核函数相关的参数:degree & gamma & coef0

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

在child_process域和错误的冒泡和捕获实践【Note.js】

恒山其若陋兮

前端 11月月更

企业级运营定时任务分发设计

Quincy

运营 crontab 分布式定时任务

MobPush Android 快速集成

MobTech袤博科技

26k Star!理解Git太轻松了。。。

Jackpop

ipv6地址概述——了解ipv6地址

初学者

网络 11月月更

【网络安全必看】如何提升自身WEB渗透能力?

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

华为云会议,云上办公更轻松高效

路过的憨憨

微服务 vs 单体架构

agnostic

微服务架构

【Python 基础学习】-元组-字典-集合

度假的小鱼

11月月更 Python元组 Python字典 Python集合

跨区域远程沟通协作,大家保险选择华为云会议

科技怪授

华为云会议,轻松实现远程智能办公

秃头也爱科技

企业办公新模式,随时随地云上协同!

秃头也爱科技

华为云会议录制能力再升级,会议成果全收录!

科技怪授

【Python 函数】-介绍

度假的小鱼

11月月更 Python函数使用方法

Note.js框架中的cluster集群和断言测试的实战剖析

恒山其若陋兮

前端 11月月更

python数据分析-pandas基础(4)-数据映射apply

AIWeker

Python Python数据分析 11月月更

【网络安全】红队攻防之基础免杀

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

ABY3

NOT_FOUND

世界杯来了,让 Towhee 带你多语言「以文搜球」!

Zilliz

角色扮演?一款跨平台可移植开源游戏!

Jackpop

ipv6地址概述——了解ipv6与ipv4不同

初学者

网络 11月月更

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