2008-09-19 60 views

回答

20

表驱动方法表驱动方法的方案,让你查找信息的表,而不是使用逻辑语句(即case,if)。在简单情况下,使用逻辑语句更快更容易,但随着逻辑链变得更加复杂,表驱动代码比复杂逻辑更简单,更容易修改并且更高效。

参考:McConnell, Steve. Code Complete, Second Edition. Redmond (Washington): Microsoft, 2004. Print. Page 411, Paragraph 1.

+2

如果这是一个盲目的复制粘贴,请考虑添加引用。 – Trix 2016-05-28 00:52:37

3

表驱动方法相当简单。使用数据结构而不是if-then语句来驱动程序逻辑。例如,如果您正在处理两种类型的记录(电视与有线电视),你可以这样做:

hash[tv] = process_tv_records 
hash[cable] = process_cable_records 

在一些语言,比如Ruby或Perl,这个技术很简单。在Java中,您需要使用Reflection来查找方法句柄。

如果您想了解决策表,请在http://fitnesse.org/处调查Fitnesse测试框架。

6

引用的视频有比尔·盖茨从史蒂夫·麦康奈尔的“代码完成”一书中阅读。 Jeff Atwood mentioned this in his blog (the YouTube links match up).

从代码完成,第2版:

表驱动法是一种方案,让您查找表中的信息,而不是用逻辑语句(如果情况)弄明白。

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] 

,其结构简单,更短,并且更易于维护。