关于 kotlin-idiomatic-refactorer-spring-aware
面向 Kotlin 与 Spring 项目的重构技能,指导在改善代码清晰度和安全性的同时维持框架行为。它强调渐进式修改,并检查代理、序列化、持久化及公开接口兼容性。
主要功能
- 01先用测试或调用方确认现有行为
- 02按代码职责选择重构方式
- 03优先采用清晰且惯用的 Kotlin 写法
- 04检查 Spring 代理与 Bean 边界
- 05核对序列化、持久化和兼容性
适用场景
- 01简化 Kotlin 服务中的分支与空值处理
- 02重构 DTO、领域模型或配置代码
- 03评估 Kotlin 改动对 Jackson 和 JPA 的影响
- 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 质量,同时不牺牲框架正确性。 优先选择能提升清晰度、减少意外复杂性的重构,同时保留原有行为。
首先阅读
- 当前实现及其测试。
- 公共签名、注解,以及序列化或持久化边界。
- 项目上下文中已发现的构建插件和框架约束。
- 现有代码风格和模块边界约定。
按以下顺序重构
- 使用测试或现有调用方来描述当前行为。
- 判断代码属于传输 DTO、领域逻辑、实体、配置还是框架胶合代码。
- 应用能实质提升可读性或安全性的最小惯用改进。
- 重新检查代理、序列化和持久化兼容性。
- 除非用户明确希望进行更大规模的重写,否则应保持改动渐进。
高价值 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