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