当前位置: 首页 > news >正文

系统架构师之高内聚低耦合

一、概念:

标记耦合(Stamp Coupling)和数据耦合(Data Coupling)是软件设计中两种不同的耦合类型,它们之间的区别如下:

  1. 标记耦合:标记耦合是指模块之间通过参数传递标记或标识符来进行通信的程度。这种耦合方式需要模块之间共享标记或标识符,依赖于标记或标识符的具体实现。标记耦合的特点是:
  • 模块之间通过参数传递标记或标识符来进行通信。
  • 模块之间共享标记或标识符,依赖于标记或标识符的具体实现。
  • 模块之间的耦合度较高,难以重用和修改。
  • 标记或标识符的含义和作用需要在模块之间进行共享和理解。

    2. 数据耦合:数据耦合是指模块之间通过参数传递数据来进行通信的程度。这种耦合方式需要 模块之间共享数据,但不依赖于数据的具体实现。数据耦合的特点是:

  • 模块之间通过参数传递数据来进行通信。
  • 模块之间共享数据,但不依赖于数据的具体实现。
  • 模块之间的耦合度较低,易于重用和修改。
  • 数据的含义和作用可以通过数据本身来进行理解。

因此,标记耦合和数据耦合的主要区别在于模块之间的通信方式不同。标记耦合依赖于标记或标识符的具体实现,而数据耦合不依赖于数据的具体实现。数据耦合的耦合度较低,易于重用和修改,而标记耦合的耦合度较高,难以重用和修改。

二、高内聚低耦合分类

三、耦合

非功能耦合:模块之间通过共享非功能性的属性或特征来进行通信的程度。这种耦合方式不依赖于模块之间共享的数据或功能,而是依赖于模块之间共享的性能、安全、可靠性等非功能性的属性或特征。

数据耦合:模块之间通过简单参数来传递数据进行通信,简单参数如java中得值传递。

标记耦合:模块之间通过相对复杂参数来传递数据进行通信,复杂参数如结构体,也可以理解为java中得引用传递。

外部耦合:这种耦合关系通常是通过接口或者协议进行的,例如两个系统之间的接口协议、两个不同的软件系统之间的接口等。

公共耦合:公共耦合是指多个模块之间共享同一个全局变量、常量、数据结构等共同的资源,从而形成的耦合关系。这种耦合关系使得多个模块之间紧密地相互依赖,对系统的可维护性和可扩展性产生不良影响。如不同部件通过消息中间件来传输数据。公共耦合表面上耦合度高,但从架构角度,不同部件可以专注自己的事情,也能提高复用并发,其实部件是解耦度是高的。

内部耦合:内部耦合是指一个系统中两个或多个模块之间的耦合关系,这些模块都属于同一个系统或同一个软件模块。这种耦合关系通常是通过共享数据、共享代码、共享变量等方式实现的。内部耦合是系统中最常见的耦合方式之一,但是它也是造成系统耦合度高、代码复杂度高、可维护性差等问题的主要原因之一。

四、内聚

功能内聚:模块内的元素都是为了实现同一个功能而存在的,例如所有与用户认证相关的函数都放在同一个模块中。

顺序内聚:模块内的元素都是按照一定的顺序依次执行的,例如一个读取文件的函数内部包含了打开文件、读取文件内容和关闭文件等操作。

通信内聚:模块内的元素都是为了实现某种通信或协作而存在的,例如一个客户端与服务器通信的模块内包含了发送数据、接收数据和处理数据的函数。

过程内聚:模块内的元素都是为了实现某一个过程而存在的,例如一个模块内包含了对数据进行排序、查找和过滤等操作的函数。

瞬时内聚/时间内聚:时间内聚是指一个模块内的元素都是在同一个时间段内执行的,例如一个模块内包含了所有与启动和关闭系统有关的函数

逻辑内聚:逻辑内聚是指一个模块内的元素都是为了实现一个逻辑或者功能相关的操作而存在的,例如一个模块内包含了所有与用户登录相关的函数

偶然内聚:偶然内聚是指一个模块内的元素之间没有明显的关联性,它们只是因为某些偶然的原因被放在同一个模块中,例如一个模块包含了所有与文件操作、网络通信、数据库访问等操作相关的函数

 

http://www.lryc.cn/news/92305.html

相关文章:

  • Netty核心源码剖析(二)
  • 「C/C++」C/C++ Lamada表达式
  • bug(Tomcat):StandardContext.startInternal 由于之前的错误,Context[/day01]启动失败
  • Java性能权威指南-总结6
  • 群的定义及性质
  • mac电脑git clone项目时报错证书过期和权限被拒绝
  • 【AIGC】Photoshop AI Beta版本安装使用(永久免费)
  • 01 云原生生态系统解读
  • Java——Java易错选择题复习(2)(计算机网络)
  • 【HTML5系列教程】
  • 二、电压源、电流源、受控源
  • 骨传导是哪个意思,推荐几款性能优的骨传导耳机
  • 利用Taro打造灵活的移动App架构
  • (转载)基于模拟退火算法的TSP问题求解(matlab实现)
  • splitpcap 使用说明
  • 配置docker阿里云镜像加速
  • 《消息队列高手课》课程学习笔记(八)
  • DC电源模块在工业自动化的应用
  • Java容器-集合
  • 总结890
  • 2023年5月青少年机器人技术等级考试理论综合试卷(二级)
  • 2023CCPC河南省赛 VP记录
  • 【ECCV2022】DaViT: Dual Attention Vision Transformers
  • Apache 配置与应用
  • OpenGL 纹理
  • Jeston Orin Nnao 安装pytorch与torchvision环境
  • ROS:常用可视化工具的使用
  • 智能应用搭建平台——LCHub低代码表单 vs 流程表单 vs 仪表盘
  • Mac下通过Docker安装ElasticSearch集群
  • MySQL redo log、undo log、binlog