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

内聚详解-模块

内聚详解

内聚(Cohesion)是衡量一个模块内部各元素之间联系紧密程度的指标。高内聚意味着模块内部的功能高度相关、职责单一明确,是优秀软件设计的重要特征。


1. 内聚的本质

内聚描述的是一个模块(类、方法、组件)内部各个部分之间的关联强度。高内聚的模块专注于做一件事,并且做好这一件事。

text

低内聚 = 一个模块做很多不相关的事 高内聚 = 一个模块只做一件事,并且做得很好

2. 内聚的7个层次(从低到高)

2.1 偶然内聚(Coincidental Cohesion)- 最低内聚

模块中的元素之间毫无关联,只是因为某种偶然原因被放在一起。

java

// ❌ 偶然内聚:工具类里放了一堆不相关的方法 public class Utils { // 日期格式化 public static String formatDate(Date date) { ... } // 字符串加密 public static String encrypt(String str) { ... } // 发送邮件 public static void sendEmail(String to, String content) { ... } // 计算折扣 public static BigDecimal calculateDiscount(BigDecimal price) { ... } // 读取配置文件 public static String readConfig(String key) { ... } }

问题:无法清晰描述类的职责,修改一个功能可能影响其他无关功能。

改进:拆分成多个专门类。

2.2 逻辑内聚(Logical Cohesion)

多个元素通过参数选择执行不同逻辑,但在逻辑上属于同一类别。

java

// ❌ 逻辑内聚:通过类型参数决定行为 public class DataProcessor { public void process(String type, Object data) { if ("user".equals(type)) { // 处理用户数据 validateUser(data); saveUser(data); notifyUser(data); } else if ("order".equals(type)) { // 处理订单数据 validateOrder(data); calculatePrice(data); saveOrder(data); } else if ("product".equals(type)) { // 处理商品数据 validateProduct(data); updateInventory(data); saveProduct(data); } } private void validateUser(Object data) { ... } private void validateOrder(Object data) { ... } private void validateProduct(Object data) { ... } // ... 更多方法 }

问题:方法庞大复杂,添加新类型需要修改现有代码,违反开闭原则。

改进:使用策略模式或工厂模式。

2.3 时间内聚(Temporal Cohesion)

元素因在同一时间被执行而组合在一起。

java

// ❌ 时间内聚:初始化方法包含多个不相关的初始化 public class Application { public void initialize() { loadConfiguration(); // 加载配置 connectToDatabase(); // 连接数据库 initializeLogger(); // 初始化日志 startScheduler(); // 启动调度器 loadCacheData(); // 加载缓存 registerShutdownHook(); // 注册钩子 } private void loadConfiguration() { ... } private void connectToDatabase() { ... } // ... 其他初始化方法 }

问题:虽然同时执行,但功能不相关,难以测试和维护。

改进:分离到不同的初始化器。

2.4 过程内聚(Procedural Cohesion)

元素按执行顺序组合,但可能操作不同的数据。

java

// ❌ 过程内聚:按流程顺序组织 public class OrderProcessor { public void processOrder(Order order) { // 验证订单 validateOrder(order); // 扣减库存 deductInventory(order); // 计算价格 calculatePrice(order); // 创建支付 createPayment(order); // 发送通知 sendNotification(order); } // 这些方法操作不同的数据,只是按流程执行 }

问题:方法内部耦合了多个不同职责的操作。

改进:拆分到不同的服务类。

2.5 通信内聚(Communicational Cohesion)

元素操作同一数据或数据结构。

java

// ✅ 通信内聚:所有方法都操作订单数据 public class Order { private String orderId; private List<OrderItem> items; private BigDecimal totalAmount; private OrderStatus status; public void addItem(Product product, int quantity) { // 添加商品并重新计算金额 items.add(new OrderItem(product, quantity)); recalculateTotal(); } public vo
http://www.cnnetsun.cn/news/1632332.html

相关文章:

  • 揭秘Captum归因算法:5种NLP文本分类与情感分析的最佳实践
  • crawlergo DOM事件完整收集与触发:揭秘动态网页爬取核心技术
  • Linux二进制迁移的革命性工具Exodus:为什么它比传统方法更高效
  • Notion SDK代码审查终极指南:10个关键检查点确保你的JavaScript实现符合最佳实践
  • 5分钟掌握AntiMicroX:游戏手柄映射键盘鼠标的终极指南
  • Llama 2终极指南:如何快速部署和运行Meta开源大语言模型
  • 保姆级教程:用Qlib和LightGBM从零搭建你的第一个AI量化选股策略(附完整代码)
  • Anything V5效果展示:高清细腻的二次元人像生成作品集
  • ofa_image-caption应用场景:电商图库自动打标、教育素材英文标注实操案例
  • 07-打造个性化 AI 助手
  • Pi0 Robot Control Center行业应用:建筑工地机器人安全指令理解系统
  • 如何实现DroidKaigi 2024会议应用的Firebase匿名认证集成方案
  • 终极指南:Brontes区块链分析引擎的Rust编码规范与团队协作实践
  • ai辅助开发:让快马平台智能生成高鲁棒性的heic图片转换服务
  • Qwen-Edit-2509多角度切换技术深度解析:LoRA微调在视觉视角转换中的应用实践
  • 解决403 Forbidden:StructBERT模型API服务访问权限配置指南
  • MedGemma X-Ray低配部署方案:CPU模式运行与性能衰减实测报告
  • gbase8s之mysql模式相关文档大全
  • koanf自定义Provider开发:扩展你的配置源终极指南
  • Kubernetes与安全合规最佳实践
  • EcomGPT电商助手教程:跨境电商新手如何用4个按钮完成全流程AI辅助上架
  • Bilibili下载工具部署指南:Windows/Linux环境配置完整流程
  • Qwen3.5-9B参数详解:temperature/top_p/max_tokens调优指南
  • Z-Image-Turbo-rinaiqiao-huiyewunv实战案例:同人志印刷前图像超分+风格强化预处理工作流
  • DeerFlow入门指南:医疗AI研究场景中的应用初探
  • Pixel Couplet Gen入门必看:8-bit赛博春节春联生成器快速上手步骤详解
  • Win11Debloat终极指南:一键清理Windows 11系统臃肿,让电脑重获新生
  • WechatBakTool终极指南:三步学会Windows微信聊天记录备份与恢复
  • Keyv企业级部署方案:高可用、负载均衡和安全配置终极指南
  • ComfyUI-Manager 安装故障排查与解决方案