写点什么

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

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

关注

评论

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

在CSDN的六载时光,由你来决定今年的博客之星

谙忆

一文搞懂参数传递原理

Java 编程 程序员

9条消除if...else的锦囊妙计,助你写出更优雅的代码

苏三说技术

甲方日常 84

句子

工作 随笔杂谈 日常

电动汽车的小历史及汽车方面的一个基础概念 (28天写作 Day5/28)

mtfelix

28天写作 电动汽车

未来五年数字经济九大技术趋势,区块链成数字时代刚需!

CECBC

人工智能

Spring Boot 中的项目属性配置

武哥聊编程

Java springboot SpringBoot 2 28天写作

Python 条件判断

赵开忠

Python 28天写作

Experience Never Gets Old

三只猫

28天写作

小马哥刷力扣 - LeetCode 9. 回文数

小马哥

LeetCode 算法和数据结构 28天写作

《价值》- 投资分析(4)

石云升

零售 28天写作 价值 投资分析

一致性Hash算法Java版实现

Silently9527

Java 后端 一致性Hash算法

关于时间管理的思考

.

28天写作

线程池是怎么回收空闲线程的?如果你认为有定时任务,那你就错了!

看点代码再上班

Java 程序员 后端 开发

[3/28]保障研发反应开发需求

L3C老司机

赛博时代,拿什么盛放对逝者的思念?

脑极体

来玩一玩Linux常见命令!

程序员的时光

Linux 程序员 28天写作

面试被问AQS、ReentrantLock答不出来?这些知识点让我和面试官聊了半小时!

Java鱼仔

Java 面试 并发 JUC

【Mysql-InnoDB 系列】事务模型

程序员架构进阶

MySQL 架构 innodb 事务 28天写作

28 天带你玩转 Kubernetes-- 第五天(玩转Docker)

Java全栈封神

Docker Kubernetes k8s 28天写作

区块链与物联网融合发展的机遇与挑战

CECBC

人工智能

专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?

Java 学习 程序员 面试

【计算机内功修炼】四:进程切换与线程切换的区别

码农的荒岛求生

线程 进程 进程线程区别

精选算法面试-优先队列

李孟聊AI

算法 队列 28天写作

Deno 双周刊 #1 - Deno 获 2020 JS 开源年度突破奖

hylerrix

typescript deno Node 周刊 V8

人生苦短,开发用云 | 如何优雅完成程序员的侠客梦?

阿里巴巴云原生

人工智能 阿里云 Serverless 程序员 云原生

九个最容易出错的 Hive sql 详解及使用注意事项

五分钟学大数据

sql 大数据 hive

技术er,你还特立独行坚持技术的优雅性么?

三石

28天写作 技术与业务

什么是TACACS?

发达国家加紧数字货币政策布局

CECBC

数字货币

分布式唯一ID解决方案-雪花算法

JavaPub

Java 分布式

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