In diesem Artikel von Alex Papadimoulis sehen Sie diesen Ausschnitt:
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");
}
}
Ich verstehe diesen Artikel wirklich nicht.
Ich zitiere:
Wenn jedes Unternehmen Regel konstant in einiger Konfigurationsdatei gespeichert wurde, wäre das Leben viel [mehr ( sic )] schwierig für jede Aufrechterhaltung der Software: Es würde eine Menge Code - Dateien, die eine gemeinsam genutzte, große Datei (oder das Gegenteil, viele kleine Konfigurationsdateien); Das Bereitstellen von Änderungen an den Geschäftsregeln erfordert keinen neuen Code, sondern das manuelle Ändern der Konfigurationsdateien. und das Debuggen ist viel schwieriger.
Dies ist ein Argument gegen das Vorhandensein der Konstanten-Ganzzahl "500000" in einer Konfigurationsdatei oder der Konstanten "AUTHCNS-1A" und anderer Zeichenfolgen.
Wie kann das eine schlechte Praxis sein?
In diesem Snippet ist "500000" keine Zahl. Es ist zum Beispiel nicht dasselbe wie:
int doubleMe(int a) { return a * 2;}
Dabei ist 2 eine Zahl, die nicht abstrahiert werden muss. Die Verwendung ist offensichtlich und stellt nichts dar, das später wiederverwendet werden könnte.
Im Gegenteil, "500000" ist nicht einfach eine Zahl. Es ist ein signifikanter Wert, der die Idee eines Haltepunkts in der Funktionalität repräsentiert. Diese Nummer kann an mehreren Stellen verwendet werden, sie ist jedoch nicht die Nummer, die Sie verwenden. Es ist die Idee der Grenze, unterhalb derer eine Regel gilt und oberhalb derer eine andere.
Wie bezieht sich auf es aus einer Konfigurationsdatei, oder sogar ein #define
, const
oder was auch immer Ihre Sprache bietet, schlimmer als sein Wert einschließlich? Wenn das Programm oder ein anderer Programmierer später auch diese Grenze benötigt, damit die Software eine andere Wahl trifft, sind Sie fertig (denn wann ?) sie sich ändert, garantiert Ihnen nichts, dass sie sich in beiden Dateien ändert). Das ist eindeutig schlimmer für das Debuggen.
Wenn die Regierung morgen verlangt, dass ab dem 03.05.2050 AUTHLDG-122B anstelle von AUTHLDG-1A hinzugefügt wird, ist diese Zeichenfolgenkonstante keine einfache Zeichenfolgenkonstante. Es ist eine, die eine Idee darstellt; Es ist nur der aktuelle Wert dieser Idee (was "die Sache ist, die Sie hinzufügen, wenn das Hauptbuch über 500k ist").
Lassen Sie mich das klarstellen. Ich sage nicht, dass der Artikel falsch ist; Ich verstehe es einfach nicht. Vielleicht ist es nicht zu gut erklärt (zumindest für mein Denken).
Ich verstehe, dass das Ersetzen jedes möglichen String-Literal- oder Zahlenwerts durch eine Konstante, eine Definitions- oder eine Konfigurationsvariable nicht nur nicht erforderlich ist, sondern auch die Dinge überkompliziert, aber dieses Beispiel scheint nicht in diese Kategorie zu fallen. Woher weißt du, dass du es später nicht mehr brauchst? Oder sonst jemand?