mcpField
K
kotlin-idiomatic-refactorer-spring-aware

kotlin-idiomatic-refactorer-spring-aware

github.com/jetbrains开发38540 次安装1 周前更新
代码仓库

关于 kotlin-idiomatic-refactorer-spring-aware

面向 Kotlin 与 Spring 项目的重构技能,指导在改善代码清晰度和安全性的同时维持框架行为。它强调渐进式修改,并检查代理、序列化、持久化及公开接口兼容性。

主要功能

  1. 01先用测试或调用方确认现有行为
  2. 02按代码职责选择重构方式
  3. 03优先采用清晰且惯用的 Kotlin 写法
  4. 04检查 Spring 代理与 Bean 边界
  5. 05核对序列化、持久化和兼容性

适用场景

  1. 01简化 Kotlin 服务中的分支与空值处理
  2. 02重构 DTO、领域模型或配置代码
  3. 03评估 Kotlin 改动对 Jackson 和 JPA 的影响
  4. 04为行为保持不变的增量修改制定验证计划

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jetbrains/skills --skill kotlin-idiomatic-refactorer-spring-aware

安装后在 Claude Code 中输入/kotlin-idiomatic-refactorer-spring-aware确认已加载。

附带文件agents/openai.yaml

详细介绍

Kotlin 惯用重构器(Spring 感知型)

来源映射:基于 Kotlin_Spring_Developer_Pipeline.md(SK-20)衍生的 Tier 2 高价值技能。

使命

提升代码库的 Kotlin 质量,同时不牺牲框架正确性。 优先选择能提升清晰度、减少意外复杂性的重构,同时保留原有行为。

首先阅读

  • 当前实现及其测试。
  • 公共签名、注解,以及序列化或持久化边界。
  • 项目上下文中已发现的构建插件和框架约束。
  • 现有代码风格和模块边界约定。

按以下顺序重构

  1. 使用测试或现有调用方来描述当前行为。
  2. 判断代码属于传输 DTO、领域逻辑、实体、配置还是框架胶合代码。
  3. 应用能实质提升可读性或安全性的最小惯用改进。
  4. 重新检查代理、序列化和持久化兼容性。
  5. 除非用户明确希望进行更大规模的重写,否则应保持改动渐进。

高价值 Kotlin 改进

  • 优先使用构造函数注入和不可变依赖。
  • 当 when 能改善穷尽式推理时,用它替代命令式分支。
  • 对封闭的结果或错误领域,使用 sealed class 或 sealed interface。
  • 对纯传输模型或值模型使用 data class,但不要用于 JPA 实体。
  • 当周边框架栈能够安全支持时,对领域基本类型使用值类。
  • 优先采用显式空值处理,避免到处散布 !!。
  • 仅当扩展函数能提升易发现性,且不会模糊所有权或分层时才使用。

高级重构陷阱

  • 更简洁不一定更清晰。作用域函数很容易隐藏控制流和接收者身份。
  • 当涉及副作用、日志或事务时,优美的 Kotlin 单行代码可能变得难以阅读。
  • 值类是出色的领域工具,但在 Jackson、JPA、验证和映射键方面可能需要格外谨慎。
  • Sequence 和惰性管道不一定更快,尤其是在 JPA 或重复迭代场景中。
  • 将可变服务改为表达式密集型风格时,不得隐藏异常路径或运维日志。
  • 用通用辅助抽象替换显式类,往往会损害 Spring 可追踪性和领域清晰度。
  • 如果 null、缺失值和默认值原本各有不同,重构空值处理可能会悄然改变 API 语义。

Kotlin 语言细节

  • 对库模块而言,公共内联函数、默认参数和生成的重载对二进制兼容性的影响,可能超出团队的预期。
  • Kotlin 的只读集合类型并不保证底层集合不可变。基于真正不可变这一假设进行重构,仍可能泄漏可变状态。
  • data class 的 copy() 虽然方便,但当状态转换应保持显式时,它可能削弱领域不变量。
  • 对密封层次结构使用穷尽式 when 能提升安全性,但前提是该层次结构在相关模块边界内确实是封闭的。
  • 具体化泛型和大量使用扩展函数的 DSL 可以提升使用体验,但也可能使堆栈跟踪和 Java 互操作变差。只有在权衡值得时才使用。

专家经验法则

  • 优先选择能让无效状态更难表示的重构,而不只是让代码读起来更短。
  • 当领域包含不变量、审计或事务意义时,应让业务状态转换保持显式。
  • 如果重构提升了局部代码的美观度,却模糊了日志、跟踪或逐步调试过程,那它很可能不值得采用。
  • 在共享模块中,应将源代码兼容性和二进制兼容性作为两个独立的评审问题。

与 Spring 兼容的安全规则

  • 不要以会移除所需开放性或意外改变 Bean 边界的方式重构依赖代理的类。
  • 不要将实体转换为数据类或过度精简的值对象,除非已确认持久化支持情况。
  • 不要更改 DTO 或配置类的构造函数形式,除非已确认 Jackson 和配置绑定的兼容性。
  • 不要将逻辑移入会隐式跨越架构层的扩展函数。
  • 不要用巧妙的工具类抽象掩盖重要的框架交互。

输出约定

返回以下部分:

  • 重构意图:说明要解决的质量问题。
  • 安全转换:适用于此处的具体 Kotlin 改进。
  • 框架约束:限制重构的 Spring、Jackson、JPA 或配置规则。
  • 最小补丁计划:按安全顺序进行的渐进式更改。
  • 验证:用于保护行为的测试或运行时检查。

防护措施

  • 当风险不低时,不要仅为改善外观而重构。
  • 不要为了展示对 Kotlin 惯用写法的了解而引入高级语言结构。
  • 不要压缩代码,以免影响可调试性。
  • 不要更改公共契约;如有更改,必须明确说明。

质量标准

一次成功的技能运行应让代码更符合 Kotlin 惯用写法,同时在 Spring 中依然稳定可靠、朴实易维护。 一次糟糕的运行会生成优雅却更难调试、更难演进或与框架行为不兼容的 Kotlin 代码。

评论

支持 Markdown