大家好呀,我是Louis,好久不见。
最近真的很忙,公众号断更了好久。我一直在攒一个大招,就是我的AI+DDD包子铺项目,忙活两个月总算有些眉目了。
今年年初DeepSeek横空出世,IT圈里突然开启了AI编程热潮,公司内也是自上而下让大家伙赶紧用上AI。我悄摸观察了一下,好几个项目都用上了AI。但怎么说呢,我觉得大部分人没有真正用好AI。 它写代码是很快,原来要3天干完的活,现在只要1天就写完了,然后再用额外的3天去看懂AI写了啥,再帮它修正。
我就觉得不!太!对!劲! 这不是AI的正确打开方式,于是乎我自己就干了一个小项目,来验证一下AI的能力。不干不知道,其实AI真的超出我的预期。但真要用好AI,还是得有一些技巧和方法论,碰巧我之前做过几年DDD,跟AI结合在一起,还产生了意想不到的火花。
今天就把这几个月对AI+DDD的尝试给大家总结分享一下。
先说结论:在写代码上,能帮我做80%的工作。基本上每个功能都只需微调甚至不调就可以直接用。编程效率有质的飞跃。
我把在写代码上省下来的时间用到了做更细致的系统设计和单元测试,也就是说在AI的帮助下,我可以更加专注于去做分析、设计和验证,coding是个琐碎的环节交给了AI。这已经很大程度上超出我的预期了。
此外,AI在写单元测试上也能发挥作用,这部分还在进一步探索。待后续有进展再与大家分享。
这个项目截止目前代码行数总共7800+行(含注释),还未全部完成,预计全部完成时总代码量在1.2w行左右。
包子铺代码行数统计
包子铺代码
不只代码,我还把完整的项目过程记录下来了。
包子铺部分文档
我预计5月份这个包子铺系统就可以上线运行。到时再发出来给大家看看实际效果。
如前面所说,很多人在用AI,但用好的人不多。
从0到1的小游戏或者小工具之类的都不难,让AI写一个贪吃蛇小游戏,不到2分钟就写完了,还能跑起来玩一下。
但问题在于:怎样让AI写出准确、符合预期、可维护的业务代码。
我们的业务代码,不像贪吃蛇小游戏那样,写出来图个乐就完了,业务代码是要长期维护的,可维护性特别重要。
当前AI的“记忆力”(也就是上下文长度)是比较有限的,特别是在大型项目中,今天写过的代码,它明天就“忘”了。怎样让它记住所有的业务规则?怎样让它符合我的设计预期?怎样让它保持统一的编码风格和架构风格?
此外稍微有一些制约了AI编程的因素是:太贵了,大模型本来就不便宜(DeepSeek私有化部署也是要钱),AI编程工具如cursor还在大模型上套了一层,虽然方便但也更贵了。我简单算了一下,自己完成整个包子铺项目大约在AI工具上需要花费600美元,对于这样一个小项目来说显然无法接受,于是我不断优化和AI的协作机制,成功把费用降到了50美元。
因此,怎样节省算力,把AI编程能力用到刀刃上,也需要纳入考虑。
接下来讲讲我是怎么做的。
我在这个项目上前后投入了两个多月,都是用工作以外的业余时间完成,因此可投入时间比较有限,周期拉的很长。
为了能让AI理解我的意图,我花了巨大的精力进行需求分析和设计,时间大约占50%以上,又用了30%时间调教AI,教会它我想要一个什么样风格的架构和代码,真正用于编码的时间就很少了,只占20%,基本都是在微调。接下来我把代码写完后,还考虑教一下AI帮我写单元测试。
先聊一聊AI与人的关系,好多人在讨论说AI会不会代替程序员?程序员与AI是一种怎样的协作关系?我的看法是:
很多人犯的错误就是把AI当成专家,把自己当成小白,企图通过简单的自然语言对话与AI沟通,把大多数的思考和自由发挥空间给了AI,这样即便没什么编程基础,或许短期内能做一些意想不到的创意。但是代码的可维护性成了灾难,第一个版本交付以后,再就难以迭代升级。
另一种错误就是:自己先写出一个范例,然后告诉AI,其他的功能就照着这个模式抄。这种模式的问题在于:范例代码的质量高度,决定了AI编程的质量高度。如果恰好这个范例写得不够好,后面AI抄出来的代码也都是一个水平,万一有bug就更糟,要错就全错。其次,这种模式会带来很大的代码重复率,重复率上来了,可维护性就下降了。
经过我两个多月的摸索,下面四个要素缺一不可
AI编程首要的当然是AI大模型,基本上需要了解每一个模型(或衍生工具)的特性和能力。
我自己尝试了Claude、GPT-4o、Deepseek等几个主流大模型,开发工具上有Windsurf、Cursor、Trae、Copilot。
我个人感觉,在编程能力上最强的模型还是Claude-3.7-sonnet,主要在跨文件上下文理解上比较出色。
开发工具Windsurf、Cursor平分秋色,就是贵。
Trae是免费的,但国内版只能用Deepseek,国际版可以用Claude模型但需要排队,一个指令排队长度在100-700不等,最长时间要等待2小时。
从效率上来说,我更愿意选择Windsurf、Cursor,在局部代码补全使用Copilot做为补充。
为了更省钱,我的接口定义、领域模型、数据模型、关键的一些通用值对象就用手写代码+Copilot补全,Copilot的局部补全能力还是挺强的,这部分也能省下不少时间。我更多会把涉及“业务逻辑”的部分交给Windsurf、Cursor。
有一套完善的全局提示词,是让AI编码成功的关键。每个项目都需要根据自身的特性,形成一套完整的全局提示词(或更准确说是编程约束规则),这套提示词大约在3k-6k字左右,做为全局规则输入给大模型,让其“听命于我”(Windsurf、Cursor都支持输入这样的全局规则)
提示词里应该包含哪些东西?包括但不限于
这里不应包括:xxx代码样例,请照着这个写!也不应包括过于具体的业务规则描述,这是详细设计要做的事情,不要放在全局提示词里。
这个全局的提示词最好单独一个文件,放在工程里面,在多人协同开发的时候,可以尽量让每个人生成的代码风格保持一致。
我的包子铺系统就有一套几千字的提示词模板,篇幅原因暂不做展示。但我可能在04.23会有一场直播,届时可以简单演示一下AI编程的实战。可以关注下周的直播公告。
如果说功能的正确性可以通过不断增加新的测试用例来保证,那代码的可维护性和架构合理性通过加什么来保证?增加code review的次数?
AI的编程风格,很大程度上就来自用它的人。程序员自己写的代码都不保证可维护性(不然那么多屎山代码是怎么来的?),通过code review就能识别AI的代码质量问题吗?
如我前面所说,将来程序员的工作,将会越来越多的从coding转向designing。而designing的结果将直接影响AI编程的质量、风格、可维护性,因此需要有一套良好的设计方法论来支撑,并且相较于传统的人工编程需要code review,AI编程则更多需要design review来保障设计质量。
我在实践过程中,发现DDD(领域驱动设计)其实提供了一套非常好的,系统的设计思路。我认为DDD最大的作用,就是让设计有迹可循。以前程序员专注于写代码,有一部分人就做出了编程规范。DDD就是要解决设计这个阶段的规范问题。特别在与AI结合以后,更能发挥其巨大价值。以往被大家所诟病的,DDD层数好多、代码很啰嗦的问题,在引入AI编程以后都不存在了。
当然,DDD不是唯一的选项,特别是对于那些已经习惯了面向过程思维的程序员,要转变思维方式是比较困难的。只要能找到一套与DDD对等的设计理论,也可以同样用于AI编程。
而我只不过在DDD这个关卡已经跑通了,我将会在下一期文章做重点分享,聊一下DDD在包子铺项目中的实战应用。
这里所说的开发框架,不是指Spring这样的框架,也不是RPC之类的技术框架。而是一个与DDD配套的业务代码框架。
这个框架应包含什么?
可以看到这个框架的作用是最大程度保证代码的全局风格统一、分层架构统一、组件接口统一,特别是在大型团队中,如果缺少这样一种框架约束,会导致AI生成代码时没有落脚点,容易自由发挥,导致维护成本剧增。
举一个例子,领域事件的定义,我设计了一套通用的接口,并且默认提供了一个基于DB的实现。包子铺系统在接入过程中,使用的是这一套标准接口,如果将来基于DB的实现不满足需求,可以自行替换成其他的实现(例如基于MQ)。业务代码始终感知到的是这一套接口定义,对于AI生成代码来说,也只需使用这一套接口,这样能做到最大程度的业务和技术代码解耦。
领域事件定义
这个框架我正在开发中,且用在了包子铺项目中,命名为Sugar。我会在包子铺项目正式完结后,把这个框架开源。
框架的开发和业务代码开发模式又不同,需要考虑更多易用性、可扩展性,我在设计框架时使用到很多设计模式和代码抽象,这部分AI还无法很好胜任,因此框架代码更多是我自己手写。后续我会专门用一期分享一下开发框架过程中用到的设计模式
随便总结了一些,就写了这么多,这一期先写到这吧。下一期我专门分享一下AI+DDD编程实战、提示词编写技巧、怎样把设计图转化为代码。感兴趣欢迎订阅我的公众号
在AI编程时代,AI的上限取决于程序员自身的上限,我在包子铺项目中编写了一套可以提升上限的“武功秘籍”。
这一套“秘籍”含金量太高了,我留了一点小私心,实在没舍得全部免费公开。如果对这一套“秘籍”感兴趣的同学,可以通过下面的链接购买,今天我准备了50份限时折扣优惠,只限今天!
但是做包子铺项目的初衷,是想跟大家能更好交流一下编程实践。我依然不会偏离初衷,我会把实践中的一些成果逐步拿出来分享,这篇文章就是成果的一部分。我也会选择一个合适的时机把包子铺代码开源,但不是现在,几个月的辛苦虽然有了阶段性进展,但还不够完美,仍需打磨。感谢大家的理解和支持~~
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有