Pertama, sedikit latar belakang. Saya sedang mengkode pencarian dari Usia -> Nilai. Ada 7 kurung umur sehingga tabel pencarian adalah 3 kolom (Dari | Ke | Tingkat) dengan 7 baris. Nilai-nilai jarang berubah - mereka adalah tingkat yang ditetapkan (kolom pertama dan ketiga) yang tetap sama selama 3 tahun. Saya menduga bahwa cara termudah untuk menyimpan tabel ini tanpa hard-coding adalah dalam database dalam tabel konfigurasi global, sebagai nilai teks tunggal yang mengandung CSV (jadi "65,69,0.05,70,70,74,0,06" adalah bagaimana tingkatan 65-69 dan 70-74 akan disimpan). Relatif mudah diurai lalu digunakan.
Kemudian saya menyadari bahwa untuk mengimplementasikan ini saya harus membuat tabel baru, repositori untuk membungkusnya, tes lapisan data untuk repo, tes unit di sekitar kode yang tidak mendatar CSV ke dalam tabel, dan tes di sekitar pencarian itu sendiri. Satu-satunya manfaat dari semua pekerjaan ini adalah menghindari pengkodean keras tabel pencarian.
Ketika berbicara dengan para pengguna (yang saat ini menggunakan tabel pencarian langsung - dengan melihat salinannya) pendapatnya cukup banyak bahwa "harga tidak pernah berubah." Jelas itu tidak benar-benar benar - tarif hanya dibuat tiga tahun lalu dan di masa lalu yang "tidak pernah berubah" memiliki kebiasaan berubah - jadi bagi saya untuk memprogram defensif ini saya pasti tidak seharusnya menyimpan tabel pencarian di aplikasi.
Kecuali ketika saya berpikir YAGNI . Fitur yang saya terapkan tidak menentukan bahwa tarif akan berubah. Jika tarif berubah, mereka masih akan berubah sangat jarang sehingga pemeliharaan bahkan tidak menjadi pertimbangan, dan fitur sebenarnya tidak cukup kritis sehingga apa pun akan terpengaruh jika ada penundaan antara perubahan tarif dan aplikasi yang diperbarui.
Saya sudah cukup banyak memutuskan bahwa tidak ada nilai yang akan hilang jika saya melakukan hard-code pencarian, dan saya tidak terlalu khawatir tentang pendekatan saya untuk fitur khusus ini. Pertanyaan saya adalah, sebagai seorang profesional, sudahkah saya membenarkan keputusan itu? Nilai-nilai hard-coding adalah desain yang buruk, tetapi pergi ke masalah menghapus nilai-nilai dari aplikasi tampaknya melanggar prinsip YAGNI.
EDIT Untuk mengklarifikasi pertanyaan, saya tidak khawatir tentang implementasi yang sebenarnya. Saya khawatir bahwa saya dapat melakukan hal yang cepat, buruk, dan membenarkannya dengan mengatakan YAGNI, atau saya dapat mengambil pendekatan yang lebih defensif, upaya yang tinggi, yang bahkan dalam kasus terbaik sekalipun pada akhirnya memiliki manfaat rendah. Sebagai seorang programmer profesional, apakah keputusan saya untuk mengimplementasikan suatu desain yang saya tahu cacat hanya sampai pada analisis biaya / manfaat?
EDIT Sementara semua jawaban itu sangat menarik karena saya pikir ini berkaitan dengan pilihan desain individu, saya pikir jawaban terbaiknya adalah @ Corbin dan @EZ Hart ketika mereka memunculkan hal-hal yang tidak saya pertimbangkan dalam pertanyaan:
- dikotomi yang salah dari 'menghapus nilai-nilai hard-coded dengan benar' dengan memindahkannya ke database vs 'secara efisien menerapkan YAGNI' dengan menggunakan hard-coding. Ada opsi ketiga menempatkan tabel pencarian ke dalam konfigurasi aplikasi, yang tidak menimbulkan overhead dengan cara yang benar, dan tanpa efisiensi YAGNI. Kami umumnya tidak terbatas pada salah satu atau keputusan, dan kemudian turun ke keputusan biaya / manfaat.
- pembuatan kode dapat mengurangi overhead memindahkan nilai-nilai hard-coded ke database, dan dengan cara yang juga menghilangkan keputusan over-engineered saya untuk memproses CSV ke dalam tabel. Berpotensi ini juga menambahkan masalah pemeliharaan jangka panjang dengan kode yang dihasilkan jika persyaratan dasar berubah untuk metode pencarian. Ini semua hanya mempengaruhi analisis biaya / manfaat, dan kemungkinan jika saya memiliki otomasi yang tersedia, saya bahkan tidak akan mempertimbangkan pengkodean keras seperti ini.
Saya menandai jawaban @ Corbin sebagai benar karena itu mengubah asumsi saya tentang biaya pengembangan, dan saya mungkin akan menambahkan beberapa alat penghasil kode ke gudang senjata saya dalam waktu dekat.