全文于2008年6月19日发布于InfoQ中文站上:http://www.infoq.com/cn/news/2008/06/loose-coupling-soa 摘要 在那场关于内聚对SOA是否重要的争论中,Carlos Perez表达了他关于软件构造中的耦合(coupling)及其在SOA领域的演变的观点。他首先给出了Bertrand Meyer的模块性原理(principles of modularity),然后将之延伸到自己的一套面向服务的原则上。 Carlos首先引用了Bertrand Meyer的模块性原理的原文: 模块可分解性(Modular Decomposability)——如果一种软件构造方法能有助于把一个软件问题分解为若干较简单的子问题、并用一个简单的结构将这些子问题连接起来、而且能够独立地对各个子问题作进一步分解,那么该方法就满足模块可分解性。 模块可组合性(Modular Composability)——如果一种方法,由它生产出的软件元素,未来可在不同于最初被开发的环境中通过彼此自由组合的方式来产生新的系统,那么该方法就满足模块可组合性。 模块可理解性(Modular Understandability)——如果一种方法,由它生产出的软件,人类读者无需了解其他模块(或最多只需研究少许其他模块)便可理解每一个模块,那么该方法就有利于模块可理解性。 模块连续性(Modular Continuity)——如果一种方法,在由它得到的软件架构中,功能规格上的微小改动只会引起一个(或少量)模块的变化,那么该方法就满足模块连续性。 模块保护性(Modular Protection)——如果一种方法,在由它得到的架构中,一个模块在运行时出现异常条件不会影响到该模块之外(或最多只蔓延到少数周边模块),那么该方法就满足模块保护性。 接着,他考察并评论了该领域的各个思想领袖(如Thomas Erl、Don Box、Stefan Tilkov和David Orchard等)所表达的面向服务原则。 ……Thomas Erl的原则是一组糟糕的原则,因为它们把关注点混搅起来了。 ……David Orchard的原则体现了较好的平衡,当然我必须要质疑为何把WS-*也加进来。 然后,他根据自己的服务定义,概括了以下面向服务的原则, <以下略>