У цій статті Олексія Пападімуліса ви можете побачити цей фрагмент:
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");
}
}
Я справді не розумію цю статтю.
Цитую:
Якби кожна константа правил бізнесу зберігалася в якомусь файлі конфігурації, життя було б набагато складніше [більше ( sic )] для кожного, хто підтримує програмне забезпечення: було б багато файлів коду, які б мали один, великий файл (або, навпаки, ціла маса крихітних файлів конфігурації); для розгортання змін у бізнес-правилах потрібен не новий код, а зміна файлів конфігурації вручну; а налагодження - це набагато складніше.
Це аргумент проти того, щоб постійне ціле число "500000" було у файлі конфігурації або "AUTHCNS-1A" та інші рядкові константи.
Як це може бути поганою практикою?
У цьому фрагменті "500000" - це не число. Наприклад, це не те саме, що:
int doubleMe(int a) { return a * 2;}
де 2 - число, яке не потрібно абстрагувати. Його використання очевидно, і воно не являє собою те, що згодом може бути повторно використане.
Навпаки, "500000" - це не просто число. Це значна цінність, яка представляє ідею точки перелому у функціональності. Цей номер можна використовувати в більш ніж одному місці, але це не число, яке ви використовуєте; це ідея межі / межі, нижче якої застосовується одне правило, а над яким інше.
Як посилання на нього з конфігураційного файлу, або навіть з а #define, constабо з того, що надається вашою мовою, гірше, ніж включення його значення? Якщо пізніше програма або якийсь інший програміст також вимагає цієї межі, щоб програмне забезпечення зробило інший вибір, ви накрутитеся (тому що при зміні нічого не гарантує, що воно зміниться в обох файлах). Це явно гірше для налагодження.
Крім того, якщо завтра уряд вимагає "З 5/3/2050, вам потрібно додати AUTHLDG-122B замість AUTHLDG-1A", ця строкова константа не є простою постійною константою. Це те, що представляє ідею; це лише поточне значення цієї ідеї (це "те, що ви додаєте, якщо головна книга вище 500 к").
Дозвольте уточнити. Я не кажу, що стаття неправильна; Я просто не розумію; можливо, це не надто добре пояснено (принаймні, на мій погляд).
Я розумію, що замінювати кожне можливе буквальне або числове значення на змінну константи, визначати чи конфігурацію не тільки не потрібно, але надмірно ускладнює речі, але цей конкретний приклад не підпадає під цю категорію. Звідки ви знаєте, що згодом вам це не знадобиться? Або хтось інший з цього питання?