vibe coding 最佳实践之"约束带来自由" - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
doraemonki
V2EX    程序员/div>

vibe coding 最佳实践之"约束带来自由"

  •  
  •   doraemonki Dec 31, 2025 3826 views
    This topic created in 133 days ago, the information mentioned may be changed or developed.

    有没有人会感觉 vibe coding 开发出来的东西代码一多就变成了屎山,自己失去了对项目的掌控感,经常改了一个地方其地方就爆炸。

    我想分享一个我的 vibe coding 最佳实践: 极致严格的约束+90%的测试覆盖率。

    1. 给项目开启最严格的 lint

      比如 Go 的 golangci-lint ,Rust 的 Cargo clippy 。以前人因为偷懒老是忽略编译器警告,但是 AI 时代改起来真的很快,而且帮助很大。

    2. 强制 90%的测试覆盖率(Design for Testability)

      让 AI 生成的代码设计全部以提高测试覆盖率为主要目标,后期加需求再也不担心破坏已实现功能了。真的爽的一批啊,体验过就知道什么叫做稳稳地幸福。

    3. 强制代码行数检查

      从我强制要求极高的测试覆盖率,并开启所有合理的 lint 检查之后,代码质量肉眼可见的提升了。但我逐渐发现还缺少一个工具用来限制代码行数,AI 老是喜欢在一个代码文件堆屎山啊!开源社区逛了一圈发现还没有类似的工具,于是自己用 Rust 搞了个sloc-guard

    4. 文件命名风格检查

      个人不太喜欢 commonhelper,这种毫无意义的文件名,以前懒还能忍,自从代码基本都让 AI 写之后,索性也是直接上了强制约束。

    这一套搞下来,我觉得基本实现了全自动防止 AI 堆屎山的效果。我相信 AI 写的代码可读性已经超过大多数人了,AI 也不会偷懒,该有的注释也都有,写出来的代码可以用赏心悦目来形容了哈哈。

    Talk is cheap, show me the code.

    sloc-guard,这个 Rust 项目全程实践上述做法,原汤化原食,5 万行代码勉强算是个中型项目吧,90%测试覆盖率,clippy 严格模式 0 warn ,没一个文件超过 600 行,我保证这个项目的规范程度绝对达到了非常高的水平,不信来看看嘿嘿

    Supplement 1    Jan 4
    补充一下,lint 工具记得要开启函数或方法的行数限制与认知复杂度检测
    10 replies    2026-01-04 09:16:53 +08:00
    hihanley
        1
    hihanley  
       Dec 31, 2025
    有用,还有什么约束吗?
    fulln
        2
    fulln  
       Dec 31, 2025
    其实代码生成的另外一个问题是: 代码的逻辑重复,尤其是在多表关联或者多模块关联的时候 , 原来的模块已经生成好的代码不用, 反而去重新定义一遍。
    fulln
        3
    fulln  
       Dec 31, 2025
    非常像初级开发或者刚接触项目的开发, 但是 AI 永远不会有熟悉项目的过程。 熟悉项目程度只和 context 长度正相关
    doraemonki
        4
    doraemonki  
    OP
       Dec 31, 2025
    @fulln #2 其实还有很多细节的最佳时实践,碍于篇幅与主题内容我没有分享出来。比如在每次小任务后 code review 非常重要,比如不断让 AI 质疑架构不合理的地方等等,我觉得 Design for Testability 算是一个核心哲学所以重点讲了。
    doraemonki
        5
    doraemonki  
    OP
       Dec 31, 2025   1
    @hihanley 还有一点我觉得很重要的就是,不断让 AI 质疑架构或代码不合理的地方,强调 No Backward Compatibility 主动重构(个人项目)
    tianjiyao
        6
    tianjiyao  
       Dec 31, 2025
    我一般还会加上接口格式统一之类的,AI 写着写着接口规范就乱掉了。。。
    2han9wen71an
        7
    2han9wen71an  
       Dec 31, 2025
    是怎么让 claude 写测试用例的?我的每次单测跑不过,他就把测试用例注释掉了,或者直接把业务逻辑给我改了
    doraemonki
        8
    doraemonki  
    OP
       Dec 31, 2025   2
    @2han9wen71an 把任务拆分的足够小。TDD 测试驱动开发可能不太合适,AI 注意力有限,所以得先实现逻辑再让添加全面的单元测试,并通过 CI 流水线检查才算完成任务。

    我的提示词:
    [ENGINEERING_GUIDELINES.md]( https://github.com/doraemonkeys/sloc-guard/blob/master/docs/ENGINEERING_GUIDELINES.md)

    [SKILL.md]( https://github.com/doraemonkeys/sloc-guard/blob/master/.claude/skills/task-implementation/SKILL.md)
    wukongkong
        9
    wukongkong  
       Jan 1
    所以这相当于前端的 eslint ? 昨天试了下以这个思路去写 eslint 规则,让 ai 每次都编译,感觉不错
    Just4L
        10
    Just4L  
       Jan 4
    学到了,接触 vibe coding 不久,发现确实容易单文件一直膨胀
    About     Help     Advertise     Blog     API     FAQ     Solana     4152 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 00:17 PVG 08:17 LAX 17:17 JFK 20:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86