写点什么

SOA 定义的松耦合

  • 2008-06-19
  • 本文字数:1752 字

    阅读完需:约 6 分钟

在那场关于内聚对SOA 是否重要的争论中,Carlos Perez 表达了他关于软件构造中的耦(coupling)及其在SOA 领域的演变的观点。他首先给出了 Bertrand Meyer 的模块性原理(principles of modularity),然后将之延伸到自己的一套面向服务的原则上。

Carlos 首先引用了 Bertrand Meyer 的模块性原理的原文:

  1. 模块可分解性(Modular Decomposability)——如果一种软件构造方法能有助于把一个软件问题分解为若干较简单的子问题、并用一个简单的结构将这些子问题连接起来、而且能够独立地对各个子问题作进一步分解,那么该方法就满足模块可分解性。
  2. 模块可组合性(Modular Composability)——如果一种方法,由它生产出的软件元素,未来可在不同于最初被开发的环境中通过彼此自由组合的方式来产生新的系统,那么该方法就满足模块可组合性。
  3. 模块可理解性(Modular Understandability)——如果一种方法,由它生产出的软件,人类读者无需了解其他模块(或最多只需研究少许其他模块)便可理解每一个模块,那么该方法就有利于模块可理解性。
  4. 模块连续性(Modular Continuity)——如果一种方法,在由它得到的软件架构中,功能规格上的微小改动只会引起一个(或少量)模块的变化,那么该方法就满足模块连续性。
  5. 模块保护性(Modular Protection)——如果一种方法,在由它得到的架构中,一个模块在运行时出现异常条件不会影响到该模块之外(或最多只蔓延到少数周边模块),那么该方法就满足模块保护性。

接着,他考察并评论了该领域的各个思想领袖(如 Thomas Erl、 Don Box Stefan Tilkov David Orchard 等)所表达的面向服务原则。

……Thomas Erl 的原则是一组糟糕的原则,因为它们把关注点混搅起来了。

…… David Orchard 的原则体现了较好的平衡,当然我必须要质疑为何把 WS-* 也加进来。

然后,他根据自己的服务定义,概括了以下面向服务的原则,

  1. 可分解性(Decomposability)——如果一种方法能有助于把一个软件问题分解为若干较简单的子问题、并用一个简单的结构将这些子问题连接起来、而且能够独立地对各个子问题作进一步分解,那么该方法就满足可分解性。
  2. 可组合性(Composability)——如果一种方法,由它生产出的软件元素,未来可在不同于最初被开发的环境中通过彼此自由组合的方式来产生新的系统,那么该方法就满足可组合性。
  3. 可理解性(Understandability)——如果一种方法,由它生产出的软件,人类读者无需了解其他模块(或最多只需研究少许其他模块)便可理解每一个模块,那么该方法就有利于可理解性。
  4. 连续性(Continuity)——如果一种方法,在由它得到的软件架构中,功能规格上的微小改动只会引起一个(或少量)模块的变化,那么该方法就满足连续性。
  5. 保护性(Protection)——如果一种方法,在由它得到的架构中,一个模块在运行时出现异常条件不会影响到该模块之外(或最多只蔓延到少数周边模块),那么该方法就满足保护性。
  6. 自查性(Introspection)——如果一个方法,由它得到的架构提供了“允许在运行时查询并检查模块结构及模块间通信结构”的机制,那么该方法就满足自查性。
  7. 远程性(Remoteability)——如果一个方法,由它得到的架构提供了“允许托管于不同物理环境下的不同模块与之进行模块通信”的机制,那么该方法就满足远程性。
  8. 异步性(Asynchronicity)——如果一个方法,由它得到的架构不假定模块调用将被立即响应,那么该方法就满足异步性。换言之,它假定网络或被调用模块有延迟。
  9. 面向文档(Document Orientedness)——如果一个方法,在由它得到的架构中,内部模块间的通信消息均是明确定义且互相知道的、而且各次调用之间不存在隐式的状态共享,那么该方法就是面向文档的。
  10. 标准化的协议信封(Standardized Protocol Envelope)——如果一个方法,由它得到的架构要求所有模块通信都共用一种通用信封消息格式,那么该方法就满足标准协议信封。
  11. 分散式管理(Decentralized Administration)——如果一个方法,由它得到的架构不需要对所有模块进行集中管理,那么该方法就符合分散式管理。

最后他说“至于那个无所不包的‘松耦合’;只要你愿意,上述特性中的许多都可以得到!总之,SOA 就只是松耦合的API。”

你觉得呢? Bertrand Meyer 软件质量原则有多少能用在面向服务领域?你一定得看看Carlos Perez 的原文

查看英文原文 Loose Coupling in SOA Defined

2008-06-19 02:431829
用户头像

发布了 63 篇内容, 共 28.2 次阅读, 收获喜欢 11 次。

关注

评论

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

深度揭秘openGauss分区表如何实现大数据量的快速转移

小声嘟囔:char 和 unsigned char 有那么大差距吗?

BUG侦探

c ios 汇编 ios开发

技术干货 | WebRTC 技术解析之 Android VDM

网易云信

Java android 音视频 VDM

应急响应-Yara规则木马检测

H

网络安全 应急响应

新思科技:2022年软件安全行业七大趋势预测

InfoQ_434670063458

新思科技 2022 安全趋势

神州新桥正式加入openGauss社区

廖湘科:数据库需要充分利用开源和发展开源,广泛吸纳全产业力量

开源demo| anyRTC 互动白板发布,助力实时互动场景

anyRTC开发者

音视频 在线教育 视频会议 智慧协同 开源demo

青藤:省心又省钱!安全运营服务正在成为甲方企业的主流选择

青藤云安全

恒源云(GPUSHARE)_字节跳动的mRASP预训练模型真香

恒源云

字节跳动 机器翻译 语音识别

05 Prometheus之监控主机和容器

穿过生命散发芬芳

Prometheus 1月月更

使用JDBC进行openGauss的读写分离及负载均衡

openGauss数据库源码解析系列文章——存储引擎源码解析(一)

加密货币、去中心化金融和交易的演变:一种交易成本方法

CECBC

openGauss 2021 感谢有您,一起创造了那些灿烂记忆

一周信创舆情观察(2021.12.27~2022.1.3)

统小信uos

龙蜥实验室来了!收下这份指南,秒级体验 Anolis OS

OpenAnolis小助手

国产操作系统 龙蜥社区

GBASE南大通用加入openGauss社区

共话数据库技术与行业数字化融合创新,探讨开源数据库未来发展

AI开发平台系列1:AI开发平台“家族”概览

Baihai IDP

人工智能 ide AI 平台

多IOT设备上跑物联网应用,你也可以

Speedoooo

物联网 IoT ios开发 Andriod开发

LabVIEW图像模式匹配(基础篇—11)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 图像模式匹配

中国联通联合openGauss开源社区启动数据库自主创新

中国电信发布运营商行业首个云原生关系型数据库TeleDB for openGauss

技术说|拓维·建木边缘计算平台,让算力先行一步

拓维信息

云计算 大数据 边缘计算

Linux之find命令的参数详解

CRMEB

云计算厂商们,你们辜负了中国的用户

观测观测

云原生 云计算架构师

openGauss Summit 2021你想知道的都在这!

从GitHub 到极狐GitLab 的迁移指南

极狐GitLab

GitHub 极狐GitLab 迁移指南

深入理解虚拟化

极客重生

云计算 容器 虚拟机 调度 资源隔离

数字人民币app公开上架应用市场 试点区域外用户暂无法使用

CECBC

SOA定义的松耦合_SOA_Dilip Krishnan_InfoQ精选文章