W tym artykule Alexa Papadimoulisa możesz zobaczyć ten fragment:
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");
}
}
Naprawdę nie rozumiem tego artykułu.
Cytuję:
Gdyby każda stała reguły biznesowej była przechowywana w jakimś pliku konfiguracyjnym, życie byłoby znacznie [bardziej ( sic )] trudne dla wszystkich, którzy utrzymują oprogramowanie: byłoby wiele plików kodu, które dzieliłyby jeden duży plik (lub odwrotnie, wiele małych plików konfiguracyjnych); wdrażanie zmian w regułach biznesowych nie wymaga nowego kodu, ale ręczną zmianę plików konfiguracyjnych; a debugowanie jest o wiele trudniejsze.
Jest to argument przeciwko posiadaniu stałej liczby całkowitej „500000” w pliku konfiguracyjnym lub „AUTHCNS-1A” i innych stałych ciągów.
Jak może to być złą praktyką?
W tym fragmencie „500000” nie jest liczbą. Nie jest to na przykład to samo, co:
int doubleMe(int a) { return a * 2;}
gdzie 2 to liczba, która nie musi być abstrakcyjna. Jego użycie jest oczywiste i nie reprezentuje czegoś, co można ponownie wykorzystać później.
Przeciwnie, „500000” to nie tylko liczba. Jest to znacząca wartość, która reprezentuje ideę punktu przerwania w funkcjonalności. Ten numer może być użyty w więcej niż jednym miejscu, ale nie jest to numer, którego używasz; jest to idea granicy / granicy, poniżej której obowiązuje jedna reguła, a powyżej której inna.
W jaki sposób odwoływanie się do niego z pliku konfiguracyjnego, a nawet dowolnego #define
, const
lub innego języka dostarczanego przez język, jest gorsze niż uwzględnienie jego wartości? Jeśli później program lub jakiś inny programista również wymaga tej granicy, aby oprogramowanie dokonało innego wyboru, jesteś wkręcony (ponieważ gdy się zmienia, nic nie gwarantuje, że zmieni się w obu plikach). Jest to wyraźnie gorsze w przypadku debugowania.
Ponadto, jeśli jutro rząd zażąda „Od 5/3/2050 musisz dodać AUTHLDG-122B zamiast AUTHLDG-1A”, ta stała ciągu nie jest zwykłą stałą ciągu. Jest to jeden pomysł; jest to tylko bieżąca wartość tego pomysłu (czyli „rzecz, którą dodajesz, jeśli księga jest większa niż 500k”).
Pozwól mi wyjaśnić. Nie twierdzę, że artykuł jest zły; Po prostu tego nie rozumiem; może nie jest to zbyt dobrze wyjaśnione (przynajmniej dla mojego myślenia).
Rozumiem, że zastąpienie każdej możliwej wartości literału lub wartości liczbowej stałą, definicją lub zmienną konfiguracyjną nie tylko nie jest konieczne, ale też komplikuje rzeczy, ale ten konkretny przykład nie wydaje się należeć do tej kategorii. Skąd wiesz, że nie będziesz go później potrzebować? A może ktoś inny w tej sprawie?