我有一段与此类似的PL / SQL代码:
IF l_order = 'Cancelled At Order Stage' OR l_order = 'Stopped at Billing Stage' THEN
Do something
END IF;
IF l_type = 'Internal' OR l_type = 'Contracted' THEN
Do something else
END IF;
我想避免使用硬编码字符串,所以我认为是一个简单的数组。但是,似乎有很多额外的代码行(创建一个类型,创建一个类型的数组,遍历该数组)只是为了做我在这里所做的事情。
有关该怎么做的建议是什么?我知道这是一个非常小的问题,我可能是微观优化,但我想知道什么是好的做法。
答案 0 :(得分:5)
$A := Hard-coding
$B := bad
$C := weigh
$D := advantage
$E := configurability
$F := cost
$G := reduced readability
$ A并不总是$ B.对于$ G的$ F,你需要$ C $ $ E。
People can only keep a small number of new variables in their head at once.由您来决定系统中的含义。例如,如果开发人员看到短语"在订单阶段取消"每天十几次,阅读它不需要考虑。如果用C_CANCEL_STATUS替换该短语,则代码的可读性会降低。
或许你只需要一点PL / SQL语法糖。例如,使用预定义的集合和member of
运算符可能有助于简化操作:
declare
c_cancelled_statuses constant sys.dbms_debug_vc2coll :=
sys.dbms_debug_vc2coll('Cancelled At Order Stage', 'Stopped at Billing Stage');
begin
if 'Cancelled At Order Stage' member of c_cancelled_statuses then
dbms_output.put_line('Cancelled!');
end if;
end;
/
所有程序员都明白硬编码可能不好(对吧?)。硬编码可能会损害您的代码但可能无法杀死它。
但我已经看到softcoding完全摧毁了几个系统。我知道太多经理认为任何代码行都是"硬编码",并且所有逻辑都应存储在配置表中。由于害怕硬编码,已经构建了许多可怕的专有编程语言。不要偶尔硬编码感觉太糟糕了。