什么是“表驱动方法”?
正如比尔盖茨在第二个 Windows Vista 广告中 1:05 所述。
表驱动方法是允许您在表中查找信息而不是使用逻辑语句(即 case、if)的方案。在简单的情况下,使用逻辑语句更快更容易,但是随着逻辑链变得越来越复杂,表驱动的代码比复杂的逻辑更简单,更容易修改,效率更高。
引用的视频中有比尔·盖茨阅读史蒂夫·麦康奈尔 (Steve McConnell) 的《代码完成》一书。Jeff Atwood 在他的博客中提到了这一点(YouTube 链接匹配)。
来自 Code Complete,第 2 版:
表驱动方法是一种允许您在表中查找信息而不是使用逻辑语句(if和case)来找出它的方案。
McConnell 在他的示例中使用数组作为他的“表”,但我认为这个概念可以应用于数据库表或任何其他类似表的东西。
这个概念最好通过一个例子来解释。
假设您正在经营一家餐厅,并且每个桌号有不同数量的座位。
您获取特定桌子座位数的逻辑可能类似于
if table number == 1
table has 4 seats
else if table number == 2
table has 8 seats
. . .
因此,如果您有 50 张桌子,那么您将有 100 行代码来确定座位数。
使用表驱动方法,您可以创建一个数组,其索引表示表号,值表示座位数,因此您的逻辑看起来像
tables [] = {4, 8, 2, 4, ...}
table seats = tables[table number]
它更简单,更短,更容易维护。
表驱动方法非常简单。使用数据结构而不是 if-then 语句来驱动程序逻辑。例如,如果您正在处理两种类型的记录(电视与有线电视),您可以这样做:
hash[tv] = process_tv_records
hash[cable] = process_cable_records
在某些语言中,例如 Ruby 或 Perl,这种技术很简单。在 Java 中,您需要使用反射来查找方法句柄。
如果您想了解决策表,请查看http://fitnesse.org/上的 Fitnesse 测试框架。