为什么OOP强调高内聚低耦合_Java工程结构实践说明

高内聚低耦合是Java工程可维护、可扩展、安全可靠的核心实践:高内聚指类职责单一、逻辑内聚;低耦合靠接口编程与依赖注入实现模块解耦;封装与分层架构是其落地保障。

因为高内聚低耦合直接决定代码能不能长期维护、容易扩展、安全可靠。它不是理论空话,而是Java工程每天都在面对的真实问题。

高内聚让每个类“守好自己的摊子”

一个类只做一件事,并且把相关逻辑全包圆,这就是高内聚。比如订单校验价格计算折扣应用这些动作,都该集中在OrderProcessor里,而不是散落在用户服务、库存服务甚至Controller里。

  • 类内部方法都围绕“订单处理”这个核心目标,不掺杂发短信、写日志、查数据库等无关逻辑
  • 字段和方法彼此强关联,删掉一个方法不会让其他方法突然失效
  • 修改折扣规则时,只动applyDiscount(),不影响验证或总价计算

低耦合让模块之间“点头之交,各干各的”

两个类之间依赖越少、接口越简单,改动就越安全。Java里最典型的低耦合实践,就是面向接口编程 + 依赖注入

  • 业务类不直接new PayPalGateway(),而是接收PaymentGateway接口
  • 支付方式切换(PayPal → Stripe)只需换实现类,不用改PaymentService一行代码
  • 单元测试时可轻松注入Mock对象,不依赖真实网络或第三方SDK

封装是实现高内聚低耦合的底层手段

把字段设为private,只暴露必要的public方法,不是为了“防着别人”,而是为了划定责任边界

  • Student类把age设为私有,用setAge()加校验逻辑,外部就无法赋值-5或999
  • 外部调用者只关心“能设置年龄”,不关心怎么校验、存哪、是否同步到缓存
  • 将来把年龄改成从身份证号推算,只要setAge()签名不变,所有调用点完全无感

工程结构上要看得见的分层隔离

包结构不是随便建的,它是低耦合的物理体现。常见合理分层:

  • controller:只处理H

    TTP协议、参数校验、返回格式,不碰业务逻辑
  • service:专注领域流程,调用多个repository但不关心SQL怎么写
  • repository:只和数据库打交道,不涉及订单状态流转等业务判断
  • modeldto分开:避免数据库实体直接透传到前端,防止敏感字段泄露

基本上就这些。不复杂,但容易忽略。