关于 121-java-object-oriented-design
121-java-object-oriented-design 是一项依据面向对象设计指南审查和重构 Java 代码的技能,涵盖 SOLID、类设计、对象创建、方法和代码异味,并要求改动前后进行编译检查。
主要功能
- 01分类识别面向对象设计问题
- 02选择针对性的设计参考
- 03涵盖设计原则、类和代码异味
- 04指导渐进式且保持行为的重构
- 05要求编译与完整验证
适用场景
- 01审查 Java 代码中的设计问题
- 02在保持行为的前提下重构代码异味
- 03改进类、方法或对象创建设计
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jabrena/ plinth --skill 121-java-object-oriented-design安装后在 Claude Code 中输入/121-java-object-oriented-design确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/121-java-object-oriented-design-oop-concepts.md121-java-object-oriented-design-code-smells.md121-java-object-oriented-design-methods.md121-java-object-oriented-design-enums-annotations.md121-java-object-oriented-design-exceptions.md121-java-object-oriented-design-object-creation.md121-java-object-oriented-design-classes-interfaces.md121-java-object-oriented-design-principles.md详细介绍
Java 面向对象设计指南
根据对请求和受影响代码的评估,选用有针对性的面向对象设计参考资料,审查并改进 Java 代码。
此技能涵盖哪些内容?
- 基本设计原则(SOLID、DRY、YAGNI)
- 类和接口设计:组合优于继承、不可变性、尽量缩小可访问范围、访问器方法
- 核心面向对象概念:封装、继承、多态
- 对象创建模式:静态工厂方法、Builder、Singleton、依赖注入、避免创建不必要的对象
- 面向对象设计中的代码异味:上帝类、Feature Envy、不恰当的亲密关系、拒绝的遗赠、霰弹式修改、数据泥团
- 方法设计:参数校验、防御性复制、谨慎设计方法签名、使用空集合而非 null、Optional 的用法
- 异常处理:受检异常与运行时异常、标准异常、捕获失败时的消息、不得静默忽略异常
**范围:**首先对适用的面向对象设计问题进行分类,然后只加载这些问题所需的针对性参考资料。如果重构涉及多个问题领域,则加载多份参考资料。
约束
应用任何面向对象设计改动之前,先确保项目能够编译。如果编译失败,立即停止,解决问题后再继续。完成改进后,运行完整验证。
- 强制要求:应用任何改动之前,运行
./mvnw compile或mvn compile - 安全性:如果编译失败,立即停止,不得继续——编译失败属于阻断性问题
- 验证:应用改进后,运行
./mvnw clean verify或mvn clean verify - 渐进式披露:阅读参考资料前,先对适用的面向对象设计问题进行分类,然后只阅读与这些问题对应的参考资料
- 多问题领域改动:仅当请求或已诊断的代码问题涉及多个问题领域时,才阅读多份针对性参考资料
- 保持行为不变:进行有针对性、渐进式的重构,不改变可观察到的业务行为
- 渐进式安全:每次重要重构后都运行编译,并确保改动易于回退,以便在验证发现回归问题时进行回退
- 依赖安全:确认重构不会破坏导入、依赖、类关系或既有契约
- 相邻技能:专门处理类型设计时使用技能 122,专门处理异常时使用技能 126;只有当这些主题属于范围更广的面向对象设计审查的一部分时,才使用重叠的技能 121 参考资料
- 边界情况:如果请求范围不明确,请先停止并提出澄清问题,再应用改动
- 边界情况:如果缺少必需的输入、文件或工具,请说明缺少的内容,并询问是否继续提供设置指导
何时使用此技能
- 审查 Java 代码的面向对象设计
- 重构 Java 代码的面向对象设计
- 改进 Java 代码的面向对象设计
- 修正 Java 代码中对面向对象概念的误用
- 识别并解决 Java 代码中的代码异味
- 改进 Java 代码中的对象创建模式
- 改进 Java 代码中的方法设计
- 改进 Java 代码中的异常处理
工作流
- 进行 OOD 更改前编译项目
运行 ./mvnw compile 或 mvn compile;如果编译失败,立即停止。
- 评估代码并分类 OOD 问题
在阅读实现指南之前,先分析请求和受影响的 Java 代码。将每个相关问题归入一个或多个关注点:
- 基本原则:违反 SOLID、DRY 或 YAGNI。
- 核心 OOP 概念:误用封装、继承或多态。
- 代码异味:上帝类、特性嫉妒、不当亲密关系、拒绝继承、散弹式修改或数据泥团。
- 对象创建:工厂、构建器、单例、依赖注入或不必要的对象创建。
- 类和接口:可访问性、公共字段、可变性、组合或继承设计。
- 枚举和注解:整型常量、序数值、位字段、序数值索引或缺少
@Override。 - 方法:参数验证、防御性副本、签名、空集合或
Optional。 - 异常:更广泛的 OOD 审查中涉及的异常契约。
如果请求专门针对类型设计,请使用 skill 122。如果专门针对异常处理,请使用 skill 126。
- 仅读取适用的 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。 - 对于枚举、序数值、位字段、枚举查找或
@Override,请阅读references/121-java-object-oriented-design-enums-annotations.md。 - 对于方法契约、验证、防御性副本、签名、集合返回值或
Optional,请阅读references/121-java-object-oriented-design-methods.md。 - 对于更广泛的 OOD 审查中涉及的异常契约,请阅读
references/121-java-object-oriented-design-exceptions.md。
对于涉及多个关注点的重构,请阅读所有必需的参考资料,但不要阅读无关资料。
- 实施有针对性的重构
按影响程度排列问题优先级:CRITICAL、MAINTAINABILITY、FLEXIBILITY 或 CODE_QUALITY。针对每个已诊断的问题,实施适当且最小的重构,同时保留可观察行为:
- 提取类或方法,以恢复职责聚焦。
- 引入或完善抽象,以支持扩展、接口隔离和依赖倒置。
- 修正继承层次以保持可替换性,或用组合替代继承。
- 移动行为以消除特性嫉妒并改善封装。
- 针对数据泥团引入内聚的值对象或参数对象。
- 隐藏暴露的状态并减少不必要的耦合。
逐步实施更改,并在每次重要重构后编译。
- 通过完整构建进行验证
应用改进后运行 ./mvnw clean verify 或 mvn clean verify。
- 报告已实施的 OOD 改进
按影响程度和关注点报告发现、使用的相关参考资料、实施的重构、对可维护性/灵活性/可测试性的益处、保留行为的证据,以及最终的编译和测试结果。
参考资料
如需详细指导、示例和约束,请参阅:
- 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