写点什么

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

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

关注

评论

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

架构训练营学习总结

Geek_b35d92

工赋开发者社区 | 工业4.0时代,制造业企业发展智慧工厂之策略解析

工赋开发者社区

架构实战营第 10 期-模块二作业:微信朋友圈高性能复杂度分析

kaizen

「架构实战营」

《绩效领导力:使用OKR成就超出期望的未来组织》读后感

Bruce Talk

OKR 敏捷

模块三作业

Ryan

构架

房产|1-11月份全国房地产开发投资下降9.8%

前嗅大数据

在局域网搭建一个带 web 操作页面的 git 版本服务器 - Gitlab

eng八戒

git DevOps gitlab 版本管理

Python 为什么如此设计?

Python猫

Python

【审计思路】如何快速定位SQLMS注入漏洞?

网络安全学海

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

中台之建模篇

涛哥 数字产品和业务架构

中台 建模

SpringBoot 整合 Redis,再也不用求别人了

@下一站

redis 程序设计 12月日更 12月月更 springboot整合redis

这里聊聊扫地机的 IOT 开发

eng八戒

IoT ROS 移动机器人 阿里云生活物联网平台 涂鸦

ceph的组件及数据写入流程

好吃不贵

架构误区系列8:需求===架构设计

agnostic

跨平台应用开发进阶(二十三) :一文走近 testflight 上架

No Silver Bullet

uni-app testflight 12月月更 应用上架

架构实战营10期-作业2

炮仗

2022-12-17:订单最多的客户。以下数据,结果输出3。请问sql语句如何写? DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `

福大大架构师每日一题

数据库 福大大

架构实战 2 - 微信朋友圈高性能复杂度分析

架构实战营 「架构实战营」

数据库原理及MySQL应用 | 视图

TiAmo

MySQL 数据库· 12月月更

在 Windows 搭建 SVN 服务

eng八戒

svn DevOps 服务器 版本管理工具

架构实战营模块2作业

程序员小张

「架构实战营」

第二周作业

不爱学习的程序猿

作业

房产|11月全国70城房价出炉!你关心的城市房价有何变化

前嗅大数据

OpenTelemetry系列 (三)| 神秘的采集器 - Opentelemetry Collector

骑牛上青山

Java Go 调用链 微服务调用链

架构实战模块二

GeekMLS

#架构实战营

跨平台应用开发进阶(十九) :position:fixed 虚拟按键触发后无法生效问题分析及解决方案探究

No Silver Bullet

uni-app 跨平台 自定义组件 12月月更 虚拟按键

什么是MySQL插入意向锁?

江南一点雨

MySQL

跨平台应用开发进阶(二十一) :uni-app 路由传参参数丢失问题解决方案探究

No Silver Bullet

uni-app 跨平台应用 参数传递 12月月更 参数丢失

Verilog的多分支语句

芯动大师

Verilog Verilog语法 Verilog多分支语句

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