避免在具有多个条件的 If 语句中进行硬编码
Avoid hardcoding in If statement with multiple conditions
我有一段 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;
我想避免使用硬编码字符串,所以我考虑了一个简单的数组。但是,似乎有很多额外的代码行(创建一个类型,创建一个类型的数组,遍历该数组)只是为了完成我在这里得到的。
关于这里做什么的建议是什么?我知道这是一个非常小的问题,我可能会进行微观优化,但我想知道什么是好的做法。
$A := Hard-coding
$B := bad
$C := weigh
$D := advantage
$E := configurability
$F := cost
$G := reduced readability
$A 并不总是 $B。您必须将 $E 的 $D 与 $G 的 $F 相对应。
People can only keep a small number of new variables in their head at once. 由您决定在您的系统中什么是有意义的。例如,如果开发人员每天看到短语 "Cancelled At Order Stage" 十几次,阅读它就不需要思考。如果您将该短语替换为 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 完全摧毁了。我知道有太多经理认为任何一行代码都是 "hard-coded",并且所有逻辑都应该存储在配置 table 中。由于害怕硬编码,许多可怕的、专有的编程语言已经被构建出来。不要因为偶尔的硬编码而感到难过。
我有一段 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;
我想避免使用硬编码字符串,所以我考虑了一个简单的数组。但是,似乎有很多额外的代码行(创建一个类型,创建一个类型的数组,遍历该数组)只是为了完成我在这里得到的。
关于这里做什么的建议是什么?我知道这是一个非常小的问题,我可能会进行微观优化,但我想知道什么是好的做法。
$A := Hard-coding
$B := bad
$C := weigh
$D := advantage
$E := configurability
$F := cost
$G := reduced readability
$A 并不总是 $B。您必须将 $E 的 $D 与 $G 的 $F 相对应。
People can only keep a small number of new variables in their head at once. 由您决定在您的系统中什么是有意义的。例如,如果开发人员每天看到短语 "Cancelled At Order Stage" 十几次,阅读它就不需要思考。如果您将该短语替换为 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 完全摧毁了。我知道有太多经理认为任何一行代码都是 "hard-coded",并且所有逻辑都应该存储在配置 table 中。由于害怕硬编码,许多可怕的、专有的编程语言已经被构建出来。不要因为偶尔的硬编码而感到难过。