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

通俗理解“高内聚,低耦合”

在软件开发中,良好的架构设计能够大幅降低系统的复杂度,提高代码的可维护性。而“高内聚,低耦合”正是指导我们如何合理组织代码的核心原则之一。本文将从通俗的角度解释这一概念,并结合实际案例说明其重要性。

一,高内聚:该放一起的要放到一起

高内聚(High Cohesion) 指的是一个模块(类、函数、组件)内部的各个元素(方法、变量)紧密相关,共同完成一个明确的任务。

厨房的比喻:厨房里的工具(刀、砧板、锅)都是为了“烹饪”这一目标服务的,它们紧密相关,这就是高内聚。

如果厨房里混入了办公用品(电脑、文件夹),那就破坏了内聚性,导致功能混乱

二,低耦合:不该放一起的就要分隔开,少联系

低耦合(Low Coupling) 指的是模块之间的依赖关系尽可能少,修改一个模块时,不会对其他模块造成太大影响。

公司部门的比喻:市场部、技术部、财务部各自独立运作,通过标准流程(API)协作,而不是直接插手对方的工作。

如果市场部直接修改技术部的代码,那就会导致混乱,难以维护。

代码示例

高耦合的设计(不推荐):

class OrderService {private Database db = new MySQLDatabase();  // 直接依赖具体实现public void saveOrder() { db.save(); }
}

低耦合的设计(推荐):

interface Database {void save();
}class MySQLDatabase implements Database { /* ... */ }class OrderService {private Database db;  // 依赖抽象,而非具体实现public OrderService(Database db) { this.db = db; }  // 依赖注入public void saveOrder() { db.save(); }
}

这样,OrderService 不直接依赖 MySQLDatabase,而是通过接口交互,未来可以轻松替换为 PostgreSQLDatabase 或其他存储方式。

三,高内聚与低耦合的关系

高内聚: 关注的是模块内部的组织方式,确保功能单一、职责清晰。

低耦合 :关注的是模块之间的交互方式,确保依赖最小化。

两者相辅相成:高内聚的模块自然倾向于低耦合,因为它们只关注自己的职责,不会过度依赖外部。

四,实际应用场景

1 微服务架构

  • 高内聚:每个微服务只负责一个业务领域(如订单服务、支付服务)。

  • 低耦合:服务之间通过 API(REST/gRPC)通信,而不是直接访问对方的数据库。

2 前端组件化(如 React/Vue)

  • 高内聚:一个组件只负责渲染特定 UI(如 Button 组件只处理点击样式)。

  • 低耦合:组件之间通过 Props/Events 通信,而不是直接修改对方的状态。

五,如何实现高内聚低耦合?

  1. 单一职责原则(SRP):一个类/模块只做一件事。

  2. 依赖倒置原则(DIP):依赖抽象,而非具体实现。

  3. 接口隔离原则(ISP):不要强迫模块依赖它不需要的接口。

  4. 使用设计模式:如工厂模式、观察者模式等,减少直接依赖。

http://www.lqws.cn/news/78211.html

相关文章:

  • 解锁 AI 大语言模型的“知识宝藏”:知识库的奥秘与优化之道
  • 项目管理进阶:56页大型IT项目管理实践经验分享【附全文阅读】
  • 学习STC51单片机25(芯片为STC89C52RCRC)
  • ESP32之Linux编译环境搭建流程
  • C++中实现随机数(超详细!​​​​​)
  • web架构2------(nginx多站点配置,include配置文件,日志,basic认证,ssl认证)
  • Spring MVC
  • MATLAB 安装与使用详细教程
  • 网络地址转换
  • 【笔记】为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境)
  • Android第十二次面试GetX库渲染机制
  • 数据结构之堆:解析与应用
  • PostgreSQL pgrowlocks 扩展
  • 吴恩达MCP课程(5):mcp_chatbot_prompt_resource.py
  • webpack和vite的区别
  • SQL 逻辑处理顺序详解
  • 2025年危化品安全员考试题库及答案
  • 软件测评师教程 第2章 软件测试基础 笔记
  • DeepSeek模型多模态扩展与跨模态理解实战
  • 强人工智能 vs 弱人工智能:本质区别与未来展望
  • JavaSE 字符串:深入解析 String、StringBuilder与 StringBuffer
  • springboot04
  • NVMe IP现状扫盲
  • [网页五子棋][匹配对战]落子实现思路、发送落子请求、处理落子响应
  • Java设计模式之备忘录模式详解
  • 告别printf!嵌入式系统高效日志记录方案
  • 用“红烧鱼”类比说明卷积神经网络CNN的概念
  • 第18讲、Odoo接口开发详解:原理、类型与实践
  • 2024年数维杯国际大学生数学建模挑战赛C题时间信号脉冲定时噪声抑制与大气时延抑制模型解题全过程论文及程序
  • P12592题解