耦合,指一程序中,模块及模块之间信息或参数依赖的程度。两个部分耦合,其表现就是其中一部分的变化可能引发另一部分(为了维持适当的功能)也跟着变化。

(摘自 wiki)在面向过程编程中,存在以下几种耦合类型

  • Content coupling,内容耦合,一个模块直接使用另一个模块内部的代码,违背了信息隐藏的软件设计原则。
  • Common coupling,共享耦合,多个模块都会访问同一个全局数据。
  • External coupling,外部耦合,多个模块共享同一个外部数据格式、通信协议、设备接口。
  • Control coupling,控制耦合,一个模块控制另一个模块的执行流程。
  • Stamp coupling (data-structured coupling),特征耦合/标记耦合,也称数据结构耦合,多个模块公用一个组合数据结构,但每个模块只用了其中一部分。
  • Data coupling,数据耦合,多个模块通过参数共享数据。

在面向对象编程中,耦合类型有

  • Subclass coupling,子类耦合,子类能链接到父类,父类不能链接到子类。
  • Temporal coupling,时空耦合,仅仅因为同时发生,两个动作就被放到一个模块中。
  • Dynamic coupling,动态耦合,各部分在运行时才发生的联系,如同步/异步通信、动态绑定。
  • Static coupling,静态耦合,通过约定来处理的静态依赖,如操作系统、框架、传递依赖管理的库。
  • Semantic coupling,语义耦合,各部分使用的概念相似性。
  • Logical coupling,逻辑耦合/演化耦合/变化耦合,两个部分的变化总是同时发生或前后相继。

在微服务架构的语境中,静态耦合用于分析操作依赖,动态耦合用于分析通信依赖。

如何划分模块、服务,以何种方式通信、以何种方式交换信息都属于处理静态依赖的约定。

动态依赖则主要受三个维度影响:Communication、Consistency、Coordination。

未完待续…

分类: CODE啃书

0 条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注