通过矩阵样式,我的意思是有 n 个变量,每个变量都有一定数量的输入,并且必须处理所有可能的值。最简单的情况是多个布尔值并且必须处理真/假的每种组合。如果返回的值遵循某些模式,这很容易,但否则似乎很难。
(如果有比“矩阵样式”更好的名称,请评论并告诉我,以便我更新标题。)
处理此问题的丑陋方法是 if else 链。
IF self.A = 'N' THEN
IF self.B = 'N' THEN
...
ELSE
...
END IF;
ELSE
IF self.B = 'N' THEN
...
ELSE
...
END IF;
END IF;
祝你好运跟踪混乱,尤其是超过 4 个变量。
一种更易读的方法是一起进行所有检查。
IF self.A = 'N' AND ... self.Y = 'N' AND self.Z = 'N' THEN
returnValue := 'Bob';
END IF;
If self.A = 'N' AND ... self.Y = 'N' AND self.Z = 'Y' THEN
returnValue := 'Birthday Party';
END IF;
...
If self.A = 'Y' AND ... self.Y = 'N' AND self.Z = 'N' THEN
returnValue := 'What did I ever do to deserve this?';
END IF;
...
If self.A = 'Y' AND ... self.Y = 'Y' AND self.Z = 'Y' THEN
returnValue := 'Thank God I am done!';
END IF;
如果你做一个 CASE 语句而不是一堆 if/else,你可以做得更好,但这仍然很难维护。想象一下,不小心在某个地方放了 Y 而不是 N,然后不得不去找它。考虑到错误的机会随着每个新变量的添加而呈指数增长(因为您至少需要编写的代码量增加一倍),在任何像这样的重大问题中都有很大的错误机会。
您可能会做一些有趣的文本替换来尝试减少错误。我最近用 5 个变量做了这个。我开始...
NNNNN
NNNNY
...
YYYYN
YYYYY
然后我使用 Notepad++ 对它们进行了一些查找和替换,以尝试减少错误输入 N 或 Y 的机会。但最终产品看起来仍然很难维护。所以我想知道是否有更好的方法来处理这个问题(主要是在可维护性方面,尽管在不失去可维护性的情况下提高效率也是受欢迎的建议)。虽然我正在专门寻找 PL/SQL 解决方案,但仍然欢迎使用其他语言的任何解决方案,因为它们可能能够被翻译成 PL/SQL。
编辑:如果有人试图解决这个问题并想使用我当前的解决方案,这里是查找和替换。
查找:([Y,N])
根据变量重复多次。替换:\t\t\tWHEN self.valueName = '\1' THEN\r\n\t\t\t\treturnValue := ''
对于self.valueName = '\1'
您拥有的每个变量,重复一次,每次递增 1。您还需要设置正确的 \t 数量,以便它匹配它应该有多少缩进。这适用于记事本++,正则表达式模式。