在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)構建的軟件難以擴展,只有堅持代碼質量,才能實現可持續維護。