【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

自研分布式高性能RPC框架及服务注册中心ApiRegistry

车江毅

Java Eureka 注册中心 服务治理 服务中心

Sovit3D引擎快速构建智慧变电站三维可视化系统

2D3D前端可视化开发

物联网 智慧变电站 智能变电站 数字孪生变电站 变电站可视化

聚焦技术,锐意创新,GaussDB给世界一个更优选择

华为云开发者联盟

数据库 后端 华为云 12 月 PK 榜

如何合并Excel文档

Geek_249eec

C# Excel VB.NET

如何删除数据并刷新列表

Towify

微信小程序 无代码 触发器

openGemini v0.2.0版本正式发布:5大特性全面增强

华为云开发者联盟

数据库 后端 华为云 12 月 PK 榜

cdr2023断网离线激活下载教程

茶色酒

cdr2023

AngularJS进阶(四十一)AngularJS中使用Chart.js制折线图与饼图实例

No Silver Bullet

AngularJS 12月月更 Chart.js 折线图与饼图

spring高级源码笔记:深入理解阿里spring源码核心思想及框架应用

钟奕礼

Java 程序员 java面试 java编程

直播 | 数据智能大咖在线研讨,带你找到适合自己的企业级方法论!

StarRocks

数据库 物流

什么是制造业数字化转型?制造业数字化转型的核心与意义

优秀

数字化转型 制造业

哪篇论文宣布了 HTAP 数据库的诞生?解读《A Common Database Approach for OLTP and OLAP Using an In-Memory Column DataBase》

StoneDB

MySQL HTAP 数据库· StoneDB 12 月 PK 榜

数据库原理及MySQL应用 | 多表查询

TiAmo

MySQL 数据库 12月月更

手把手系列:如何将小程序游戏引入自有APP?(iOS篇)

FinClip

版本更新 | Towify V1.23.1 有哪些实用新功能?汇总来了!

Towify

微信小程序 无代码平台

Kerberos 身份验证在 ChunJun 中的落地实践

袋鼠云数栈

数据集成 kerberos 大数据 开源

FinClip 手把手教学:如何将小程序游戏引入自有APP?(Android篇)

FinClip

如何制作一个实时在线显示评论?

Towify

微信小程序 无代码

银斯微与大敦科技签署MOU,推动UI开发工具在中国的落地应用

科技热闻

AlibabaP8,耗时182天肝出来1015页分布式全栈手册

程序知音

Java 分布式 后端 java架构

PreSTU:一个专门为场景文本理解而设计的简单预训练模型

华为云开发者联盟

人工智能 华为云 OCR 12 月 PK 榜

震惊,WSL2居然可以挂载USB

DisonTangor

WSL2 usb

AngularJS进阶(四十)创建模块、服务

No Silver Bullet

服务 模块 AngularJS 12月月更

面了40+岁的大叔,没有录用,并不是因为年龄

产品运营心经

工作经历 面试‘ 职场发展 大龄求职

介绍四大并发集合类并结合单例模式下的队列来说明线程安全和非安全的场景及补充性能调优问题。

C++后台开发

多线程 并发 后端开发 异步 linux开发

guitar pro2023下载官方版app

茶色酒

Guitar Pro guitar pro2023

骨灰级精品,京东百万架构师亲码的MySQL内部笔记太硬核了

小小怪下士

Java MySQL 程序员

AngularJS进阶(三十九)基于项目实战解析ng启动加载过程

No Silver Bullet

项目实战 AngularJS 12月月更 启动加载

公司刚来的京东架构师:看完我写的spring笔记,甩给了我一份文档

钟奕礼

Java 程序员 Java 面试 java编程

马斯克都不懂的 GraphQL,API 网关又能对其如何理解?

API7.ai 技术团队

api 网关 graphql APISIX

系统的混乱并非业务本身之复杂,我们并不擅长处理『简单』

阿里技术

软件工程 复杂度

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