で、この記事アレックス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");
}
}
私は本当にこの記事を理解していません。
引用:
すべてのビジネスルールの定数は、いくつかの設定ファイルに格納されていた場合は、人生はずっとだろう[全(原文のまま)]困難なソフトウェア保守みんなのために:1、大きなファイルを共有コードファイルがたくさんあるだろうし(または、その逆、非常に多くの小さな設定ファイル); ビジネスルールの変更を展開するには、新しいコードは必要ありませんが、構成ファイルを手動で変更する必要があります。デバッグははるかに困難です。
これは、構成ファイルに「500000」定数整数、または「AUTHCNS-1A」およびその他の文字列定数を持つことに対する引数です。
これはどうすれば悪い習慣になるのでしょうか?
このスニペットでは、「500000」は数字ではありません。たとえば、次と同じではありません。
int doubleMe(int a) { return a * 2;}
ここで、2は抽象化する必要のない数値です。その使用は明らかであり、後で再利用される可能性のあるものを表すものではありません。
それどころか、「500000」は単なる数字ではありません。これは重要な値であり、機能のブレークポイントのアイデアを表しています。この番号は複数の場所で使用できますが、使用している番号ではありません。それは限界/境界線の概念であり、その下に1つのルールが適用され、その上に別のルールが適用されます。
構成ファイル、または#define
、const
またはあなたの言語が提供するものから、それをどのように参照していますか?ソフトウェアは、別の選択を行うように後でプログラム、またはいくつかの他のプログラマに、また、それがボーダーライン必要な場合は、(ので、ねじ込みしているとき、それは変更し、何もそれが両方のファイルに変更されることを保証しません)。デバッグにとっては明らかに悪いことです。
さらに、明日、政府が「5/3/2050以降、AUTHLDG-1AではなくAUTHLDG-122Bを追加する必要がある」と要求した場合、この文字列定数は単純な文字列定数ではありません。アイデアを表すものです。それは単にそのアイデアの現在の値です(「元帳が500kを超える場合に追加するもの」)。
明確にさせてください。記事が間違っていると言っているわけではありません。わかりません。多分それはあまり説明されていません(少なくとも私の考えでは)。
可能なすべての文字列リテラルまたは数値を定数、定義、または構成変数に置き換えることは必要なだけでなく、物事を複雑にしすぎることを理解していますが、この特定の例はこのカテゴリに該当しないようです。後で必要にならないことをどのように知っていますか?それとも他の誰か?