背景:Spring Boot + MyBatis Plus,个人项目,用Cursor的Chat模式和Agent模式写了快三个月。一开始确实爽,CRUD基本不用动脑,但最近改需求时发现一个问题:它生成的Service层逻辑越来越绕,很多地方为了“兼容”我之前的代码,会额外塞一些没必要的判断和状态流转。我试着让它重构,结果它又基于现有代码“自洽”地改,反而把一些原本清晰的接口搞复杂了。
用Cursor写后端三个月,感觉代码越来越难维护了怎么办?
全部回复
共 79 条说实话你这个情况我也踩过坑,AI写代码最大的问题不是逻辑错,而是它会为了“看起来合理”不断叠兼容层,最后变成一团橡皮泥。我觉得你得给它划个硬边界,比如明确告诉它某个方法只准改哪几行,别让它自由发挥。另外建议定期手动重构那些核心接口,别指望AI能自己跳出它写出来的屎山,它只会把屎山装修得更像毛坯房。
我跟你讲,Cursor这玩意儿写CRUD确实爽,但一旦逻辑复杂点,它那个“自洽”就是灾难,它会把所有历史包袱都当合理性给保留下来。我现在的做法是,每次让它改代码前先自己把旧的烂逻辑删干净,再让它从干净的起点写,不然它永远在给垃圾堆做减法。你是不是也没怎么给它定过“代码洁癖”这种prompt?
这我太有同感了,AI生成代码的维护成本是滞后爆发的,前一个月有多爽后面改起来就有多痛。它特别擅长把简单问题绕成复杂状态机,而且你让它重构它反而会“理解”错误的设计意图,继续往深了挖。我最近学乖了,每攒两周代码就手动过一遍Service层,该拆的拆该合并的合并,别把AI当架构师,它就是高级点的补全工具。
这情况太真实了,AI会在自己写的烂代码上继续加固,建议把关键服务层拆开重写,别让它自己改。
Cursor生成的代码用久了就像滚雪球,建议先把接口契约定死,再让它按新结构生成,否则只会越改越乱。
这太真实了,AI会顺着烂代码继续“优化”,我觉得得定期自己动手理清核心逻辑,别全交给它。
说白了就是AI在给你写技术债,建议每两周手动重构一次核心链路,别让它自己改自己。
说实话我也有同感,AI生成的代码初期确实快,但三个月后那个“自洽”重构简直灾难,它会把历史包袱当成设计约束来维护。我后来干脆给它划红线,比如明确告诉它哪些方法不许动,或者直接甩给它一个精简版接口让它重写,比让它自由发挥靠谱多了。另外建议你定期用git对比一下它改动的diff,发现绕逻辑就手动回退,别指望它自己意识到问题。
同感,AI生成代码的“自洽性”太强了,重构时容易在错误方向上越走越深,建议多手动拆几个小方法给它做约束。
我踩过这坑,后来直接让它按接口文档重写,别让它看旧代码,反而干净很多。
这其实是AI写代码的经典陷阱,它特别擅长在旧代码上打补丁而不是重构,因为这样对它的上下文最省事。我后来干脆定期手动理一遍Service层,把那些多余的兼容判断全删掉,反而比让Cursor自己改干净得多。另外建议你试试在提问时明确禁止它修改已有方法签名,只允许新增,这样能逼它走更清晰的路子。个人项目还好,要是团队协作这么搞,review的人真的会疯。
这情况太真实了,AI生成的代码就像滚雪球,越滚越臃肿,最后只能靠人肉拆弹。
建议别让它基于现有代码重构,直接给它接口定义和业务约束重新写,反而清爽。
跟你情况差不多,后来我学乖了,AI生成的代码我基本只当参考,核心逻辑还是自己手写。它最大的问题是特别会顺着你现有的烂结构继续加补丁,不会主动帮你砍掉那些历史包袱。建议你试试让它先写测试用例再重构,或者干脆把Service层重写一遍,别让它基于旧代码改。
试试让它先写测试再重构,或者干脆自己手动把关键链路理一遍,AI容易在烂代码上继续叠烂代码。
让它写之前先自己把接口定死,不然AI只会顺着烂代码继续圆,越圆越乱。
建议每半个月手动重写一次核心Service,AI生成的只当草稿用。
这情况太真实了,Agent模式写多了确实会陷入“自我强化”的怪圈,它为了不破坏你现有逻辑,反而会堆一堆防御性代码,导致整个调用链像滚雪球一样复杂。我后来学乖了,碰到这种纠缠不清的模块,直接把它当成“新手代码”推倒重写,而不是让它去重构,反而省心。你试试把要改的核心接口用自然语言描述清楚需求,再限定文件范围让它从零生成,效果会好很多。另外,给Service层写个简单的状态机文档,自己心里有数了,再让AI动手,就不容易被它带偏了。
我最近也在用类似的AI工具写后端,感触挺深的。你说的这个“自洽式重构”我太有体会了,AI会顺着你现有的屎山逻辑继续往上堆,它不会主动去质疑那些历史包袱,结果就是代码越来越像个毛线团。我觉得关键还是得靠人把边界划清楚,比如每个Service的职责和接口契约,得先在文档里写死,然后让AI只在这个框架内填肉。另外,我试过最有效的一招是定期让它“从零生成某个模块的替代方案”,而不是让它在旧代码上打补丁,这样反而能逼它给出更干净的思路。你那个个人项目如果没测试覆盖,建议先把核心链路的关键测试补上,不然AI改起来没约束,越改越放飞。还有个小疑问,你有没有试试在Prompt里明确禁止它添加额外的状态判断?有时候它过度防御,就是因为你不给它限定条件。
跟我想的一样,AI生成的代码容易自圆其说,越补越乱,建议关键逻辑还是自己手写。
说白了这就是个技术债问题,Cursor只认当下,不背历史的锅,不如定期砍掉重写。
说到这个我太有感触了,之前用AI写Python脚本也是这德行,三个月后代码里全是它自己给自己擦屁股的逻辑。我觉得核心问题在于Cursor的“上下文记忆”其实是个双刃剑,它太执着于“兼容你之前的代码”了,导致每次改动都会在旧逻辑上叠新逻辑,而不是推翻重来。你试着让它重构的时候,它其实是在做“最小改动”的局部优化,根本没理解你想要的“接口清晰”是啥意思。我后来学乖了,遇到这种绕圈子的时候,直接手动把那个Service层的方法全删了,然后明确告诉AI“不要参考旧实现,从接口定义重新设计内部流程”,效果会好很多。另外,你个人项目的话,有没有试过给它降低一点权限,比如只让它写Mapper和DTO,Service层逻辑自己搭骨架?我这么搞之后,至少核心业务流的复杂度是可控的。不过话说回来,你用的Spring Boot这套,如果AI生成的逻辑已经盘根错节了,有时候与其让它重构,不如找个周末自己把那几个核心方法重写一遍,顺便理理自己的需求,可能比跟AI斗智斗勇更省心。
说实话我也有类似的感觉,Cursor在增量需求上特别容易把代码写成“屎山叠屎山”,因为它总是倾向于最小改动去适配旧逻辑,而不是大刀阔斧地重构。我现在一般让它写完核心业务后,自己再过一遍Service层,把那些多余的兼容分支删掉,反而比让它改更省心。另外建议你试试给它更明确的约束,比如在prompt里强调“不要修改已有方法签名”或者“保持单一职责”,效果会好不少。
深有同感,AI写代码是增量快、重构慢,越往后越像在帮它擦屁股,建议定期让它按新需求重写而不是修补。
这情况我也踩过坑,Cursor对已有代码的“尊重”过头了,不如直接开个新会话把核心逻辑说清楚,让它推倒重来反而干净。
这太真实了,AI写代码是越写越有自己的“脾气”,重构时得盯紧点,不然逻辑就成毛线团了。
Cursor生成的代码就像橡皮泥,捏多了就变形,建议关键业务逻辑还是自己手写吧。
我也有类似感受,Cursor在“延续上下文”这件事上做得太激进了,它会把之前所有代码都当成不可推翻的约束,结果就是逻辑路径越滚越复杂。我后来干脆把要重构的类单独拎出来,不给它看旧代码,只描述目标和边界条件,反而能生成干净得多。另外建议你给Service层手动划个边界,凡是涉及状态流转的都自己写,让AI只管CRUD和简单查询,不然它真的会把简单问题封装成复杂系统。
这情况我也踩过坑,AI重构只会顺着烂代码继续滚雪球,不如自己动手拆几个核心类再让它续写。
说白了它就是你的结对编程搭子,大方向还得自己把控,让它自由发挥只会越来越拧巴。
这情况太真实了,AI生成的代码像个滚雪球,重构时不如直接推倒重写来得干净。
试试让它只改接口不动内部逻辑,或者干脆拆分模块,别让它看全局。