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

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

一、概念:

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

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

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

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

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

二、高内聚低耦合分类

三、耦合

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

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

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

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

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

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

四、内聚

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

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

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

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

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

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

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

 

相关文章:

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

一、概念: 标记耦合(Stamp Coupling)和数据耦合(Data Coupling)是软件设计中两种不同的耦合类型,它们之间的区别如下: 标记耦合:标记耦合是指模块之间通过参数传递标记或标识符来进…...

Netty核心源码剖析(二)

1.Netty接受请求过程源码剖析 1>.从之前的Netty启动过程源码剖析中,我们得知服务器最终注册了一个Accept事件等待客户端的连接.我们也知道,NioServerSocketChannel将自己注册到了bossGroup单例线程池(reactor线程)上,也就是EventLoop; 2>.先简单说下EventLoop的逻辑,Ev…...

「C/C++」C/C++ Lamada表达式

✨博客主页:何曾参静谧的博客 📌文章专栏:「C/C」C/C程序设计 相关术语 Lambda表达式:是C11引入的一种函数对象,可以方便地创建匿名函数。与传统的函数不同,Lambda表达式可以在定义时直接嵌入代码&#xff…...

bug(Tomcat):StandardContext.startInternal 由于之前的错误,Context[/day01]启动失败

引出 项目启动失败,一个困扰了一上午的bug 报错信息 org.apache.catalina.core.StandardContext.startInternal 一个或多个筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到 org.apache.catalina.core.StandardContext.startInternal 由于之前的错误…...

Java性能权威指南-总结6

Java性能权威指南-总结6 垃圾收集入门垃圾收集概述GC算法选择GC算法 垃圾收集入门 垃圾收集概述 GC算法 JVM提供了以下四种不同的垃圾收集算法: Serial垃圾收集器 Serial垃圾收集器是四种垃圾收集器中最简单的一种。如果应用运行在Client型虚拟机(Windows平台上的32位JVM或…...

群的定义及性质

群的定义 设 < G , ⋅ > \left<G,\cdot\right> ⟨G,⋅⟩为独异点&#xff0c;若 G G G中每个元素关于 ⋅ \cdot ⋅都是可逆的&#xff0c;则称 < G , ⋅ > \left<G,\cdot\right> ⟨G,⋅⟩为群 由于群中结合律成立&#xff0c;每个元素的逆元是唯一的 …...

mac电脑git clone项目时报错证书过期和权限被拒绝

mac电脑使用git clone命令克隆项目时&#xff0c;一开始一直提示证书过期 SSL certificate problem: certificate has expired 执行以下代码关掉验证后&#xff0c;解决了这个问题 找到git目录 Git\git-cmd输入命令跳转到bin目录&#xff0c;cd bin输入命令运行git.exe执行关…...

【AIGC】Photoshop AI Beta版本安装使用(永久免费)

AIGC 大爆发 Adobe近日宣布&#xff0c;Photoshop&#xff08;测试版&#xff09;应用程序发布了生成式AI绘图&#xff0c;这是世界上第一个创意和设计工作流程的副驾驶&#xff0c;为用户提供了一种神奇的新工作方式。生成式AI绘图由Adobe Firefly提供支持&#xff0c;Adobe的…...

01 云原生生态系统解读

云计算的技术革命 互联网时代的历程 云计算到底是什么 云计算历程 云平台的优缺点 优势 稳定性&#xff1a;云平台大量资源&#xff0c;分布式集群部署&#xff0c;保障服务永不宕机&#xff0c;几个9弹性扩展&#xff1a;按需索取&#xff0c;一键秒级开通需要的资源安全性&…...

Java——Java易错选择题复习(2)(计算机网络)

1. 下面关于源端口地址和目标端口地址的描述中&#xff0c;正确的是&#xff08; &#xff09; A. 在TCP/UDP传输段中&#xff0c;源端口地址和目的端口地址是不能相同的 B. 在TCP/UDP传输段中&#xff0c;源端口地址和目的端口地址必须是相同的 C. 在TCP/UDP传输段中&#xff…...

【HTML5系列教程】

《HTML5系列教程》目录大纲&#xff1a; 介绍 内容包括HTML简介、服务器的概念、B/S、C/S软件架构、前端与后端的开发内容、HTML发展历程、浏览器内核介绍、Web标准、WebStorm工具的使用、WebStorm常用快捷键、HTML常用标签 如&#xff1a;文本标签(span)、排版标签(div/p/h…...

二、电压源、电流源、受控源

点我回到目录 目录 理想电压源 理想电流源 受控源 电流源做功问题 电压源做功问题 理想电压源 •定义&#xff1a;两端电压保持定值或一定的时间函数&#xff0c;且电压值与流过它的电流i无关 •特点&#xff1a;理想电压源两端的电压由本身决定&#xff0c;与外电路无关…...

骨传导是哪个意思,推荐几款性能优的骨传导耳机

​骨传导耳机是通过头部骨迷路传递声音&#xff0c;而不是直接通过耳膜的振动来传递声音。与传统的入耳式耳机相比&#xff0c;骨传导耳机不会堵耳朵&#xff0c;在跑步、骑车等运动时可以更好的接收外界环境音&#xff0c;保护听力&#xff0c;提升安全性。此外&#xff0c;骨…...

利用Taro打造灵活的移动App架构

最近公司的一些项目需要跨端框架&#xff0c;技术老大选了Taro&#xff0c;实践了一段时间下来&#xff0c;愈发觉得Taro是个好东西&#xff0c;所以在本篇文章中稍微介绍下。 什么是Taro&#xff1f; Taro&#xff08;或称为Taro框架&#xff09;是一种用于构建跨平台应用程…...

(转载)基于模拟退火算法的TSP问题求解(matlab实现)

1 理论基础 1.1 模拟退火算法基本原理 模拟退火(simulated annealing,SA)算法的思想最早是由Metropolis等提出的。其出发点是基于物理中固体物质的退火过程与一般的组合优化问题之间的相似性。模拟退火法是一种通用的优化算法&#xff0c;其物理退火过程由以下三部分组成&am…...

splitpcap 使用说明

背景 当PCAP原始文件特别巨大的时候&#xff0c;整个文件直接载入内存是相当耗时的&#xff0c;于是一个简单的想法是将大的PCAP切分成若干小PCAP。对于这个任务&#xff0c;现有工具splitcap是可以完成的。无论是按照主机对、还是按照五元组信息切分&#xff0c;splitcap都会…...

配置docker阿里云镜像加速

默认情况下docker安装镜像文件是从docker官方的镜像中心下载&#xff1a;https://hub.docker.com/ &#xff0c; 有时速度慢&#xff0c;可以通过配置docker阿里云镜像来加速&#xff0c;配置后&#xff0c;就从国内阿里云下载。 注册阿里云用户&#xff0c;登录->工作台-&g…...

《消息队列高手课》课程学习笔记(八)

如何实现高性能的异步网络传输&#xff1f; **异步与同步模型最大的区别是&#xff0c;同步模型会阻塞线程等待资源&#xff0c;而异步模型不会阻塞线程&#xff0c;它是等资源准备好后&#xff0c;再通知业务代码来完成后续的资源处理逻辑。**这种异步设计的方法&#xff0c;…...

DC电源模块在工业自动化的应用

BOSHIDA DC电源模块在工业自动化的应用 随着自动化技术的不断发展&#xff0c;DC电源模块已成为工业控制系统中不可或缺的一个组成部分。在许多自动化系统中&#xff0c;如机器人、控制器、PLC等&#xff0c;都需要使用到直流电源模块来提供稳定可靠的电源&#xff0c;以确保系…...

Java容器-集合

目录 1.Java容器概述 2.集合框架 3.Collection接口中的方法使用 4.iterator() 5.List接口 2.ArrayList、LinkedList、Vector相同点 3.不同点 1.ArrayList 2.LinkedList 3.Vector 4.Vector源码分析 5.ArrayList源码分析 6.LinkedList源码分析 6.List中的常用方法 …...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...