在AI时代,DRY和SOLID比以往任何时候都更重要
本文作者基于自身编程经验,认为在AI辅助编码日益普及的今天,DRY和SOLID(特别是S、O、I原则)不仅没有过时,反而变得更为关键。AI倾向于生成大量重复代码且不考虑复用,导致代码库维护困难。文章强调遵循SOI原则(单一职责、开闭原则、接口隔离)能使AI生成的代码更易于扩展和重用,同时建议采用迭代开发方式,注重代码质量而非数量。
在AI时代,DRY和SOLID比以往任何时候都更重要
随着AI编码工具的普及,关于DRY(Don't Repeat Yourself)和SOLID原则是否仍然适用的争论再次升温。有人认为AI可以处理重复代码,甚至认为重复是有益的,因为AI能从模式中学习。然而,本文作者Jan Cizmar基于多年的编程经验以及近几个月与AI工具协作的实践,得出了相反的结论:在AI时代,坚持DRY和部分SOLID原则变得尤为重要。
作者指出,SOLID原则中的Liskov替换原则(L)和依赖倒置原则(D)在实际开发中价值有限。Liskov原则在深度继承层次中才有意义,而现代代码库更倾向于组合和接口;依赖倒置原则则容易导致不必要的接口抽象,作者主张只在真正需要抽象时才创建接口。真正关键的是S(单一职责)、O(开闭原则)和I(接口隔离),作者将其简称为SOI。
AI生成的代码普遍存在忽视复用的问题。一项针对2.11亿行代码的研究显示,2020至2024年间,复制粘贴的代码量激增48%,而重构代码的比例从24%骤降至10%以下,这恰好与AI编码工具的爆发式增长相吻合。AI倾向于以隧道视野完成具体任务,不会主动考虑现有代码中是否已有类似功能,也不会提取可复用的组件,导致后端功能重复、前端组件风格不一。
作者特别反驳了“AI会更新所有重复代码”的观点。AI在修改某处代码时,不会自动搜索并同步其他重复位置。实践中已出现AI复制代码时遗漏部分逻辑,从而引入新bug的情况。随着时间推移,不同位置复制的代码会产生偏差,形成难以检测的技术债务。
对于“编写更详细的规范”这一解决方案,作者认为它增加了开发者的额外负担,且假定架构在设计之初就已完美,忽略了良好架构常通过迭代演化而来的事实。
作者的建议是回归基本原则:保持代码DRY,遵循SOI,使其易于扩展和复用,而非直接修改。例如,Material UI之所以优秀,正是因为遵循开闭原则,用户几乎无需修改其源码。当代码库结构清晰时,AI也能产生更好的结果。此外,作者倡导迭代式开发:逐步构建、审查、测试、清理代码,确保开发者充分理解每一部分,而不是一次性生成大量代码后草草审查。
最终,作者强调,AI使得产生大量代码变得极其容易,但世界需要的不是更多代码,而是更高质量的代码。纯粹靠“氛围编码”(vibecoding)构建的软件难以扩展,只有坚持代码质量,才能实现可持续维护。