Di artikel ini oleh Alex Papadimoulis, Anda dapat melihat cuplikan ini:
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");
}
}
Saya benar-benar tidak mengerti artikel ini.
Saya mengutip:
Jika setiap aturan bisnis konstan disimpan dalam beberapa file konfigurasi, hidup akan jauh [lebih ( sic )] sulit bagi semua orang menjaga perangkat lunak: akan ada banyak file kode yang berbagi satu, file besar (atau, sebaliknya, banyak sekali file konfigurasi kecil); menyebarkan perubahan pada aturan bisnis tidak memerlukan kode baru, tetapi secara manual mengubah file konfigurasi; dan debugging jauh lebih sulit.
Ini adalah argumen yang menentang memiliki bilangan bulat konstan "500000" dalam file konfigurasi, atau "AUTHCNS-1A" dan konstanta string lainnya.
Bagaimana ini bisa menjadi praktik yang buruk?
Dalam cuplikan ini, "500000" bukan angka. Misalnya, tidak sama dengan:
int doubleMe(int a) { return a * 2;}
di mana 2, adalah angka yang tidak perlu diabstraksi. Penggunaannya jelas, dan itu tidak mewakili sesuatu yang dapat digunakan kembali nanti.
Sebaliknya, "500000" bukan sekadar angka. Ini nilai yang signifikan, nilai yang mewakili ide breakpoint dalam fungsionalitas. Nomor ini dapat digunakan di lebih dari satu tempat, tetapi bukan nomor yang Anda gunakan; itu adalah gagasan tentang batas / batas, di bawah mana satu aturan berlaku, dan di atasnya yang lain.
Bagaimana merujuknya dari file konfigurasi, atau bahkan #define
, const
atau apa pun yang disediakan bahasa Anda, lebih buruk daripada memasukkan nilainya? Jika nanti pada program, atau programmer lain, juga memerlukan garis batas itu, sehingga perangkat lunak membuat pilihan lain, Anda kacau (karena ketika itu berubah, tidak ada yang menjamin Anda bahwa itu akan berubah di kedua file). Itu jelas lebih buruk untuk debugging.
Selain itu, jika besok, pemerintah menuntut "Dari 5/3/2050, Anda perlu menambahkan AUTHLDG-122B alih-alih AUTHLDG-1A", konstanta string ini bukan konstanta string sederhana. Itu salah satu yang mewakili ide; itu hanya nilai saat ini dari ide itu (yang merupakan "hal yang Anda tambahkan jika buku besar di atas 500k").
Izinkan saya mengklarifikasi. Saya tidak mengatakan bahwa artikel itu salah; Saya tidak mengerti; mungkin itu tidak dijelaskan dengan baik (setidaknya untuk pemikiran saya).
Saya mengerti bahwa mengganti setiap string yang mungkin nilai literal atau numerik dengan variabel konstan, define, atau konfigurasi, tidak hanya tidak perlu, tetapi terlalu rumit, tetapi contoh khusus ini tampaknya tidak termasuk dalam kategori ini. Bagaimana Anda tahu bahwa Anda tidak akan membutuhkannya nanti? Atau orang lain dalam hal ini?