用途
本技能用于审查、改进或重构 Java 面向对象设计。它会在评估请求和受影响代码后,选择聚焦的面向对象设计参考资料,对 Java 代码进行审查与改进。
主要能力
技能覆盖以下方面:
- 基础设计原则:SOLID、DRY、YAGNI
- 类与接口设计:组合优于继承、不可变性、最小化可访问性、访问器方法
- 核心 OOP 概念:封装、继承、多态
- 对象创建模式:静态工厂方法、Builder、Singleton、依赖注入、避免不必要的对象
- OOD 代码坏味道:上帝类(God Class)、依恋情结(Feature Envy)、不当亲密(Inappropriate Intimacy)、被拒绝的遗赠(Refused Bequest)、霰弹式修改(Shotgun Surgery)、数据泥团(Data Clumps)
- 方法设计:参数校验、防御性拷贝、谨慎的签名、空集合优于 null、Optional 用法
- 异常处理:受检异常与运行时异常、标准异常、失败捕获消息、不静默忽略
使用方式
技能的工作流程如下:
- 在应用 OOD 变更前编译项目:运行
./mvnw compile或mvn compile,若编译失败立即停止。 - 评估代码并分类 OOD 关注点:分析请求和受影响的 Java 代码,将每个相关问题归入一个或多个关注点(基础原则、核心 OOP 概念、代码坏味道、对象创建、类与接口、枚举与注解、方法、异常)。
- 只读取适用的 OOD 参考资料:根据分类结果映射到聚焦的参考文件,例如 SOLID/DRY/YAGNI 对应
references/121-java-object-oriented-design-principles.md,封装/继承/多态对应references/121-java-object-oriented-design-oop-concepts.md,代码坏味道对应references/121-java-object-oriented-design-code-smells.md,对象创建对应references/121-java-object-oriented-design-object-creation.md,类与接口对应references/121-java-object-oriented-design-classes-interfaces.md,枚举与注解对应references/121-java-object-oriented-design-enums-annotations.md,方法对应references/121-java-object-oriented-design-methods.md,异常对应references/121-java-object-oriented-design-exceptions.md。跨关注点的重构需读取所有相关参考,但不读取无关参考。 - 应用聚焦的重构:按影响优先级(CRITICAL、MAINTAINABILITY、FLEXIBILITY、CODE_QUALITY)排序,对每个诊断出的关注点应用最小合适的重构,同时保持可观察行为不变。具体包括:提取类或方法以恢复聚焦职责;引入或改进抽象以支持扩展、接口隔离和依赖倒置;修正继承层次以保持可替换性,或用组合替代继承;移动行为以消除依恋情结并改进封装;为数据泥团引入内聚的值对象或参数对象;隐藏暴露的状态并减少不必要的耦合。增量应用变更,每次重要重构后编译。
- 完整构建验证:应用改进后运行
./mvnw clean verify或mvn clean verify。 - 报告应用的 OOD 改进:按影响和关注点报告发现、使用的聚焦参考、应用的重构、可维护性/灵活性/可测试性收益、行为保持证据,以及最终编译和测试结果。
适用场景
- 审查 Java 代码的面向对象设计
- 重构 Java 代码的面向对象设计
- 改进 Java 代码的面向对象设计
- 修复 Java 代码中 OOP 概念的误用
- 识别并解决 Java 代码中的代码坏味道
- 改进 Java 代码中的对象创建模式
- 改进 Java 代码中的方法设计
- 改进 Java 代码中的异常处理
限制
- 在应用任何 OOD 变更前,确保项目可编译。若编译失败,立即停止,直到解决后才能继续。
- 强制要求:在应用任何变更前运行
./mvnw compile或mvn compile。 - 安全要求:若编译失败,立即停止,不得继续——编译失败是阻塞条件。
- 验证要求:应用改进后运行
./mvnw clean verify或mvn clean verify。 - 渐进式披露:在阅读参考资料前先分类适用的 OOD 关注点,然后只阅读映射到这些关注点的参考。
- 多关注点变更:仅当请求或诊断出的代码问题跨越关注点边界时,才阅读多个聚焦参考。
- 保持行为:应用聚焦的增量重构,不改变可观察的业务行为。
- 增量安全:每次重要重构后编译,并保持变更易于回滚,以防验证发现回归。
- 依赖安全:确认重构不会破坏导入、依赖、类关系或既有契约。
- 相邻技能:专用类型设计工作使用技能 122,专用异常处理工作使用技能 126;仅当这些主题属于更广泛的 OOD 审查时,才使用重叠的技能 121 参考。
- 边界情况:若请求范围不明确,停止并在应用变更前提出澄清问题。
- 边界情况:若缺少必需的输入、文件或工具,报告缺失内容并询问是否继续提供设置指导。
参考资料
详细指导、示例和约束见以下文件:
references/121-java-object-oriented-design-principles.mdreferences/121-java-object-oriented-design-oop-concepts.mdreferences/121-java-object-oriented-design-code-smells.mdreferences/121-java-object-oriented-design-object-creation.mdreferences/121-java-object-oriented-design-classes-interfaces.mdreferences/121-java-object-oriented-design-enums-annotations.mdreferences/121-java-object-oriented-design-methods.mdreferences/121-java-object-oriented-design-exceptions.md