İlk olarak biraz arka plan. Yaş -> Ücret aramasını kodluyorum. 7 yaş aralığı vardır, bu nedenle arama tablosu 7 satırlı 3 sütundan (Kimden | Kime | Ücret). Değerler nadiren değişir - bunlar 3 yıl boyunca aynı kalan yasal oranlardır (birinci ve üçüncü sütunlar). Bu tabloyu sabit kodlamadan depolamanın en kolay yolunun, bir CSV içeren tek bir metin değeri olarak genel yapılandırma tablosundaki veritabanında olduğunu anladım (böylece "65,69,0.05,70,74,0.06" 65-69 ve 70-74 katmanları depolanır). Ayrıştırmak sonra kullanmak nispeten kolay.
Daha sonra bunu uygulamak için yeni bir tablo, etrafına sarmak için bir havuz, repo için veri katmanı testleri, CSV'yi masanın içine sürükleyen kodun etrafında birim testler ve aramanın etrafındaki testler oluşturmam gerektiğini fark ettim. Tüm bu çalışmaların tek yararı, arama tablosunu kodlamaktan kaçınmaktır.
Kullanıcılarla konuşurken (şu anda arama tablosunu doğrudan kullanan - basılı bir kopyaya bakarak) görüş hemen hemen "oranlar asla değişmez". Açıkçası bu aslında doğru değil - oranlar sadece üç yıl önce yaratıldı ve geçmişte "asla değişmeyen" şeylerin değişme alışkanlığı vardı - bu yüzden bunu savunmacı bir şekilde programlamak için kesinlikle arama tablosunu saklamamalıyım uygulama.
YAGNI diye düşündüğüm hariç . Uyguladığım özellik oranların değişeceğini belirtmiyor. Oranlar değişirse, bakım o kadar nadiren değişecek ve bakım bile dikkate alınmayacak ve özellik, oran değişikliği ile güncellenen uygulama arasında bir gecikme olursa herhangi bir şey etkilenecek kadar kritik değildir.
Ben arama zor kod eğer değer hiçbir şey kaybolmayacağına karar verdim ve ben bu özel özelliği benim yaklaşım hakkında çok endişe değilim. Sorum şu: Bir uzman olarak bu kararı doğru bir şekilde gerekçelendirdim mi? Sabit kodlama değerleri kötü bir tasarımdır, ancak değerlerin uygulamadan kaldırılması sorununa gitmek YAGNI ilkesini ihlal ediyor gibi görünmektedir.
DÜZENLEME Soruyu açıklığa kavuşturmak için gerçek uygulamadan endişe etmiyorum. Ya hızlı, kötü bir şey yapabileceğimden ve YAGNI diyerek bunu haklı çıkarabildiğimden ya da en iyi durumda bile sonuçta düşük faydaları olan daha savunmacı, yüksek çaba gerektiren bir yaklaşım benimseyebileceğimden endişeliyim. Profesyonel bir programcı olarak kusurlu olduğunu bildiğim bir tasarımı uygulama kararım basitçe bir maliyet / fayda analizine iniyor mu?
DÜZENLEME Bir bireyin tasarım tercihlerine geldiğini düşündüğüm için tüm cevaplar çok ilginç olsa da, en iyi cevapların soruda dikkate almadığım şeyleri ortaya çıkardıklarında @ Corbin ve @EZ Hart'ın olduğunu düşünüyorum:
- veritabanına taşıyarak 'sabit kodlanmış değerleri doğru şekilde kaldırmanın' yanlış ikilemesine karşı sabit kodlama kullanarak 'YAGNI'yi etkili bir şekilde uygulamak'. Arama tablosunu uygulama yapılandırmasına koymanın üçüncü bir seçeneği vardı, bu da doğru şekilde ek yüke neden olmaz ve YAGNI'nin verimliliği olmadan. Genel olarak, ya / veya kararlarla sınırlı değiliz ve daha sonra bir maliyet / fayda kararına düşer.
- kod üretimi, sabit kodlanmış değerleri veritabanına taşıma yükünü azaltabilir ve bir CSV'yi tabloya işleme konusundaki aşırı tasarlanmış kararımı da kaldıracak şekilde. Arama yöntemi için temel gereksinimler değişirse, bu potansiyel olarak oluşturulan kodla ilgili uzun vadeli bir bakım sorunu da ekler. Tüm bunlar sadece maliyet / fayda analizini etkiler ve muhtemelen otomasyona sahip olsaydım böyle bir şeyi kodlamayı bile düşünmezdim.
@ Corbin'in cevabını doğru olarak işaretliyorum çünkü geliştirme maliyeti varsayımlarımı değiştiriyor ve muhtemelen yakın gelecekte cephaneme bazı kod oluşturma araçları ekleyeceğim.