我有几条产品线,产品具有各种功能。我有一个为每个产品制作的图纸列表,下面是图纸中表示的产品线、产品和功能的示例。
我试图弄清楚,当给定具有所有功能的特定产品(即表中的单行)时,围绕这些功能构建我的代码以选择正确的图纸的最有效最简洁的方法是什么?
我总是可以做类似的事情
if ($product == "A"
&& $motor == true
&& $feet == 3
&& $outlet == true
&& $manual == false)
getDrawing("A_motor_3_outlet_no_manual.jpg");
并最终得到与表中的行一样多的扁平 if 语句。但必须有更好的方法。我认为这可能与基数有关,或者可能与产品每个属性中选项的可变性有关。出于某种原因,确切的概念使我无法理解。
例如,我有一种感觉,最好先检查产品是否有电机,因为一旦你知道它会消除大约一半的选项并更快地缩小范围。即在主外部 if 块中执行以下操作:
if ($motor == true)
{
//7 drawings left to check
}
else
{
//6 drawings left to consider
}
而不是这样的:
if ($feet == 1)
{
//still 10 rows left to consider
}
else if ($feet == 2)
{
//just 2 options left to check
}
else if ($feet == 3)
{
//one option only left:
getDrawing("B_motor_3_no_outlet_manual.jpg");
}
但也许我只是想多了,只需要一个包含所有属性的查找表,也许像
getDrawing($lookup[$product][$motor][$feet][$outlet][$manual]);
关于查找表最好使用哪种属性顺序以及是否重要的问题仍然存在。
问题:
是否有“最佳” if-then-else 块嵌套顺序来决定产品属性,以最大限度地减少代码必须做出的总体决策总数,还是我需要放弃这种思路而只使用查找表? 为什么或者为什么不?
编辑:顺便说一句..这看起来是使用数据库的好人选..但我总共只有 48 行,可以直接将它们编码成代码。这将是只读的,根本不会经常更新,所以我正在考虑使用多维数组来编码这些数据。