在Alex Papadimoulis的这篇文章中,您可以看到以下片段:
private void attachSupplementalDocuments()
{
if (stateCode == "AZ" || stateCode == "TX") {
//SR008-04X/I are always required in these states
attachDocument("SR008-04X");
attachDocument("SR008-04XI");
}
if (ledgerAmnt >= 500000) {
//Ledger of 500K or more requires AUTHLDG-1A
attachDocument("AUTHLDG-1A");
}
if (coInsuredCount >= 5 && orgStatusCode != "CORP") {
//Non-CORP orgs with 5 or more co-ins require AUTHCNS-1A
attachDocument("AUTHCNS-1A");
}
}
我真的不明白这篇文章。
我引用:
如果每个业务规则不断被存储在一些配置文件,生活会多[更多(原文如此)难以为大家维护软件:有会是大量的代码文件共享的一个大文件(或者,反过来,大量微型配置文件);部署对业务规则的更改不需要新代码,而是手动更改配置文件;而调试则要困难得多。
这是反对在配置文件中包含“ 500000”常量整数或“ AUTHCNS-1A”和其他字符串常量的说法。
这怎么可能是个坏习惯?
在此代码段中,“ 500000”不是数字。例如,它与以下内容不同:
int doubleMe(int a) { return a * 2;}
其中2是不需要抽象的数字。它的用法很明显,并且不代表以后可以重用的内容。
相反,“ 500000”不仅仅是数字。这是一个重要的价值,代表了功能断点的想法。该号码可以在多个地方使用,但不是您正在使用的号码。这是限制/边界线的概念,低于此规则将适用一个规则,高于该规则将适用另一条规则。
从配置文件甚至是#define
,const
或您的语言提供的任何内容中引用它,比包含它的值还差吗?如果后来上节目,或者一些其他的程序员,还要求边缘,使该软件使得另一种选择,你就完蛋了(因为当它改变,没有什么可以保证你将在这两个文件改变)。对于调试而言,这显然更糟。
另外,如果明天政府要求“从5/3/2050起,您需要添加AUTHLDG-122B而不是AUTHLDG-1A”,则此字符串常量不是简单的字符串常量。它代表一个想法。这只是该想法的当前值(即“如果分类帐超过500k,则添加的内容”)。
让我澄清一下。我并不是说这篇文章是错误的;我就是不明白。也许解释得不太好(至少出于我的想法)。
我确实知道,用常量,定义或配置变量替换所有可能的字符串文字或数字值不仅不是必需的,而且会使事情复杂化,但是该特定示例似乎并不属于此类。您怎么知道以后将不需要它?还是其他人呢?