内容纲要

背景

在当今AI辅助编程工具爆发的时代,开发者有了更多提升效率的选择。我在撰写上一篇博客时,尝试使用Windsurf来加速JWT + Spring Security的集成开发示例Demo,并且极大地减少了开发时间。本文将分享Windsurf的核心功能、使用技巧,以及它如何帮助我更快地构建安全认证系统,还有这段时间尝试过程中积攒的一些技巧和经验。

Windsurf

Windsurf是由Codeium公司推出的一款AI辅助编程工具,它结合了深度上下文感知多模型AI集成实时协作能力,旨在提升开发者的编码效率。

亮点

  1. 深度上下文感知:能理解整个代码库,包括未打开的文件,提供更精准的代码建议。
  2. 多模型AI集成:支持Claude 3.5 Sonnet、GPT-4o等模型,适用于不同编程任务。
  3. Flows模式:结合Agent和Copilot的能力,实现多步骤任务自动化。
  4. Cascade功能:可自动生成代码、修复Bug,甚至执行终端命令。Write模式可以直接修改/创建文件。
  5. 多模态交互:支持截图/流程图作为开发输入,实现"所见即所得"

使用体验

在最近一段时间内,我多次在工作中使用Windsurf进行代码修改、功能新增、代码阅读并定位bug、框架搭建等尝试,并完全使用其完成了JWT + Spring Security的集成开发代码撰写。基于这段时间的个人经验,我总结了如下使用技巧和建议。

基本使用

  • 快捷键Ctrl + I打开命令窗口,Ctrl + L打开Cascade面板。
  • Write模式:让Windsurf直接修改代码文件。
  • Chat模式:获取建议后手动调整。

不同场景使用体验

代码编写

适用场景:简单场景的实现,如CRUD接口、工具类方法、DTO/POJO生成

体验

  • 全链路代码生成:如Controller → Service → Mapper的链路生成,代码采用率可达85%+
  • SQL编写或优化:如Mybatis的xml文件,或者复杂SQL编写等,代码采用率约90%。但需要prompt中描述清楚所有表之间的关联关系,同时需要明确查询空值、模糊查询等要求。
  • 现有功能代码修改或完善:需要对现有功能代码进行一定程度的修改或新增时,也可使用Write模式进行辅助,但是在修改范围较小的情况下,效率提升有限。
  • 图片输入辅助开发:将前端页面的原型图作为输入,可以分析出所有的业务场景以及该页面涉及到的接口。以此生成Controller → Service → Mapper的链路 + DAO、DTO等结构体。

痛点

  • 复杂业务逻辑需拆解:如涉及事务、分布式锁、性能优化等,需分步提交Prompt。
  • 代码风格偶有不一致:需通过prompt或者规则约束缩进/命名等代码风格,并约束使用的技术选型等。
  • 工具类调用需显式指定:AI默认倾向手写逻辑,如需使用工具类需要在prompt中指定。
  • 错误的文件生成:当业务需求比较复杂或一次prompt需要生成的代码较多时,存在错误生成文件的风险。
  • 生成文件的路径问题:由于复杂系统的层级架构比较复杂,在生成文件时存在放置于错误文件夹或层级的可能性。为解决该问题可以在Rules中配置分层规则。
  • 层级混淆问题:在生成全链路代码前建议手动创建分层文件框架,AI易混淆层级。或者将层级规定和文件命名规定设置在Rules中,减少错误文件目录的可能性。
代码重构

适用场景:方法抽取、减少if-else层级、常量提取与替换

体验

  • code smell处理:如if-else层级减少、常量提取、方法提取、工具类提取等,但常量引用时会出现import包名错误的问题。
  • 复杂方法使用设计模式:可以直接使用AI将代码重构为设计模式,如工厂模式、策略模式等都可完成。

痛点

  • 复杂业务逻辑需拆解:如涉及事务、分布式锁、性能优化等,需分步提交Prompt。
  • import存在问题:当代码重构涉及到提取并引用常量、提取并引用工具类时,import常常是存在问题的。
bug定位与修改

适用场景:空指针异常、循环性能问题、代码逻辑问题
体验

  • 日志分析+代码定位:粘贴报错日志后,AI能快速关联到问题代码
  • 问题可能性分析:通过定位到逻辑错误的位置或现象,将涉及到的方法、实际结果、期望结果作为输入,可以获得代码逻辑问题的多种可能性,辅助debug。
  • 常见报错处理:对于现有代码,可以批量对容易出现空指针的代码进行处理。
代码阅读

适用场景:接手遗留系统,快速理解复杂逻辑,生成知识库
体验

  • 关键链路提取:生成方法调用流程图,可以生成Mermaid等格式的文件用于留存
  • 注释增强:对无注释代码,生成注释描述代码逻辑
  • 表结构分析:对于所有表之间的关联关系,也可以生成UML图(Mermaid或者PlantUML等格式文件)
  • 依赖分析:通过规则扫描@Autowired注入点,输出类关系图

Rules配置

配置方式

在上述的建议中我提到了配置Rules以减少AI的错误可能性,通过Windsurf提供的规则引擎,我们可以将一些通用的约束配置在规则文件中,这样就可以减少在prompt中重复通用提示词并增加AI对于代码风格、架构风格、代码规范等方面的理解。

Windsurf中配置Rules的方法如下:

在此可以分别设定全局规则工作区规则

配置内容

建议在如下几个方面配置Rules文件:

  • 代码风格、架构风格
  • 交互规则
  • 输出知识库
  • 技术选型
# 语言与交互
1. 始终使用中文对话,避免专业术语堆砌
2. 每个修改步骤需提供变更说明
3. 涉及删除操作必须二次确认

# 技术规范
4. 优先使用Hutool工具库(cn.hutool.core.util)
5. Controller禁止直接调用Mapper
6. Controller和Service读写分离,读文件的文件名包含Query,写文件的文件名包含Cmd
7. 分层规则:Controller引用Service,Service引用Repository,Repository引用Mybatis提供的Mapper
8. 使用Mybatis作为ORM框架、MapStruct进行数据映射和转换

# 开发流程
9. 修改前自动扫描相关调用链路
10. 保持现有代码缩进与命名风格
11. 异步操作需添加@Async注解

AI编程实战

在基本了解Windsurf的使用后,我们通过一个实践来看一下AI如何在实际的开发过程中进行提效。以JWT+Spring Security进行权限校验和身份验证的案例,一起看一下如何最快使用AI辅助完成开发。

步骤拆分

使用AI辅助编程时使用小步prompt是效率最高的,所以我们需要对需要实现的功能进行小步拆分,然后一步步引导AI生成正确的代码。

我将整个开发流程拆分成6个步骤,并且每个步骤下有多个细节。每个细节的需求经扩充后提交给AI,使其生成对应的代码。在生成代码后需要进行仔细的检查,若出现逻辑错误或代码飘红,也需要让AI继续修改,反复直到你认为代码可以被使用。

⚠️值得一提的是,使用cursor和windsurf之类的编辑器存在一个痛点:对于大部分后端程序员来说,类似VScode的编辑器不符合开发习惯,也较难实现debug功能。最近一个版本的windsurf已经提供了Intellij IDEA插件,使用插件可以很好地解决这个问题,再也不需要Windsurf和IDEA不断切换了。

总结

Windsurf如同一个成长中的编程伙伴——它需要清晰的指令(规则)、严格的监督(Review),但一旦磨合成熟,能将你的开发效率推向全新高度。记住:AI负责加速,你负责方向

实践示例代码请参考GitHub: https://github.com/lemon-piepie/AI_JWT_DEMO

最后修改日期: 2025年4月26日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。