过早的设计不是设计

1974 年 Donald Knuth 在论文《使用 go to 语句的结构化编程》中指出,过早优化是编程中所有邪恶(或至少是大部分)的根源,优化代码通常会使代码更难使用,应在确定需要优化的内容且不太可能对代码库进行重大结构更改时进行优化。
作者曾因相信“如果现在不使其完美,以后就永远无法回来修复”而过度设计代码,如为 Bookshelf 设计基于角色的访问控制系统,先进行了复杂的规划和设计,包括创建多个数据库表和递归 SQL 查询等,但最终部署时只需一个小改动,简单的设计就满足了需求。
如今作者在面对类似情况时会等到需要时再进行设计,例如在创建 wiki 时先使用内存哈希存储页面内容,之后再考虑存储和访问控制等问题。
关于“Don't Repeat Yourself(DRY)”原则,作者认为其并非关于代码重复,而是关于知识的表示,不应为了满足 DRY 而进行过早的重构,如在机器分配热饮的代码中,最初为满足 DRY 进行的重构导致后续添加新需求时代码变得丑陋,而应在有实际问题需要解决时再进行设计,如将分配咖啡和茶的方法分开,每个方法代表一个配方,更易理解和扩展。保持简单的关键是避免在不需要时进行操作,良好的设计来自发现的需求和证据,设计是使代码更易于更改的工具,作者的新书《simplicity》可在The Pragmatic Bookshelf购买。

阅读 13
0 条评论