พื้นหลังเล็กน้อยก่อน ฉันกำลังค้นหารหัสจากอายุ -> อัตรา มีวงเล็บอายุ 7 รายการดังนั้นตารางการค้นหาคือ 3 คอลัมน์ (จาก | ถึง | อัตรา) ด้วย 7 แถว ค่าไม่ค่อยมีการเปลี่ยนแปลง - เป็นอัตราที่มีการออกกฎหมาย (คอลัมน์แรกและคอลัมน์ที่สาม) ที่มีค่าคงเดิมเป็นเวลา 3 ปี ฉันคิดว่าวิธีที่ง่ายที่สุดในการจัดเก็บตารางนี้โดยไม่ต้องเข้ารหัสยากอยู่ในฐานข้อมูลในตารางการกำหนดค่าส่วนกลางเป็นค่าข้อความเดียวที่มี CSV (ดังนั้น "65,69,0.05,70,74,0.06" เป็นวิธีการที่ 65-69 และ 70-74 ชั้นจะถูกเก็บไว้) ค่อนข้างง่ายต่อการแยกวิเคราะห์แล้วใช้
จากนั้นฉันก็ตระหนักว่าการใช้สิ่งนี้ฉันจะต้องสร้างตารางใหม่พื้นที่เก็บข้อมูลเพื่อล้อมรอบการทดสอบเลเยอร์ข้อมูลสำหรับ repo การทดสอบหน่วยรอบ ๆ โค้ดที่ unflattens CSV ลงในตารางและทดสอบรอบ ๆ การค้นหา ประโยชน์เพียงอย่างเดียวของงานนี้ทั้งหมดคือการหลีกเลี่ยงการเข้ารหัสตารางการค้นหาอย่างหนัก
เมื่อพูดคุยกับผู้ใช้ (ผู้ที่ใช้ตารางการค้นหาโดยตรง - โดยดูที่สำเนา) ความคิดเห็นนั้นค่อนข้างดีที่ "อัตราไม่เปลี่ยนแปลง" เห็นได้ชัดว่าไม่ถูกต้องจริง ๆ - อัตราถูกสร้างขึ้นเมื่อสามปีที่แล้วและในอดีตที่ "ไม่เคยเปลี่ยน" มีนิสัยที่เปลี่ยนไป - ดังนั้นสำหรับฉันที่จะป้องกันโปรแกรมนี้ฉันไม่ควรเก็บตารางการค้นหาไว้ใน แอปพลิเคชัน
ยกเว้นเมื่อฉันคิดว่าYAGNI คุณลักษณะที่ฉันใช้อยู่ไม่ได้ระบุว่าอัตราจะเปลี่ยนแปลง หากราคาเปลี่ยนแปลงพวกเขาจะยังคงเปลี่ยนแปลงบ่อยครั้งที่การบำรุงรักษาไม่ได้พิจารณาและคุณสมบัตินั้นไม่สำคัญพอจริง ๆ ว่าจะมีผลกระทบอะไรหากมีความล่าช้าระหว่างการเปลี่ยนแปลงอัตราและแอปพลิเคชันที่อัปเดต
ฉันค่อนข้างตัดสินใจว่าจะไม่มีค่าใด ๆ จะสูญเสียหากฉันกำหนดรหัสการค้นหาอย่างหนักและฉันก็ไม่ได้กังวลเกี่ยวกับวิธีการของฉันกับคุณลักษณะเฉพาะนี้ คำถามของฉันคือในฐานะมืออาชีพฉันมีเหตุผลที่เหมาะสมในการตัดสินใจหรือไม่? ค่าการเข้ารหัสยากคือการออกแบบที่ไม่ดี แต่ปัญหาของการลบค่าออกจากแอปพลิเคชันดูเหมือนว่าจะเป็นการละเมิดหลักการ YAGNI
แก้ไขเพื่อชี้แจงคำถามฉันไม่กังวลเกี่ยวกับการใช้งานจริง ฉันเป็นห่วงว่าฉันสามารถทำสิ่งที่รวดเร็วไม่ดีและพิสูจน์ด้วยการพูดว่า YAGNI หรือฉันสามารถใช้วิธีการป้องกันและความพยายามที่สูงกว่าได้แม้ในกรณีที่ดีที่สุดก็มีประโยชน์น้อย ในฐานะที่เป็นโปรแกรมเมอร์มืออาชีพการตัดสินใจของฉันที่จะใช้การออกแบบที่ฉันรู้ว่ามีข้อบกพร่องเพียงลงไปที่การวิเคราะห์ต้นทุน / ผลประโยชน์?
แก้ไขในขณะที่คำตอบทั้งหมดน่าสนใจมากเพราะฉันคิดว่านี่เป็นตัวเลือกการออกแบบของแต่ละคน แต่ฉันคิดว่าคำตอบที่ดีที่สุดคือ@ Corbin'sและ@EZ Hart'sเนื่องจากพวกเขานำสิ่งที่ฉันไม่ได้พิจารณามาพิจารณา:
- การแบ่งแยกขั้วที่ผิดพลาดของ 'การลบค่าที่กำหนดรหัสยาก' โดยการย้ายไปยังฐานข้อมูล vs 'การใช้ YAGNI อย่างมีประสิทธิภาพ' โดยใช้การเข้ารหัสแบบยาก มีตัวเลือกที่สามในการวางตารางการค้นหาลงในการกำหนดค่าแอพซึ่งไม่ได้เกิดค่าใช้จ่ายในทางที่ถูกต้องและไม่มีประสิทธิภาพของ YAGNI โดยทั่วไปเราไม่ได้ จำกัด อยู่เพียงแค่ / หรือการตัดสินใจและจากนั้นจะเป็นการตัดสินใจด้านราคา / ผลประโยชน์
- การสร้างรหัสสามารถลดค่าใช้จ่ายในการย้ายค่าฮาร์ดโค้ดไปยังฐานข้อมูลและในทางที่จะลบการตัดสินใจที่เกินกำหนดของฉันเพื่อประมวลผล CSV ลงในตาราง อาจเป็นไปได้ว่าปัญหานี้จะเพิ่มปัญหาการบำรุงรักษาในระยะยาวด้วยรหัสที่สร้างขึ้นหากความต้องการพื้นฐานเปลี่ยนไปสำหรับวิธีการค้นหา ทั้งหมดนี้มีผลต่อการวิเคราะห์ค่าใช้จ่าย / ผลประโยชน์และเป็นไปได้ว่าถ้าฉันมีระบบอัตโนมัติที่ใช้ได้ฉันจะไม่คิดเลยว่าจะเขียนโค้ดแบบนี้
ฉันกำลังทำเครื่องหมาย @ คำตอบของ Corbin ให้ถูกต้องเพราะมันเปลี่ยนสมมติฐานการพัฒนาต้นทุนและฉันอาจจะเพิ่มเครื่องมือสร้างรหัสบางอย่างลงในคลังแสงของฉันในอนาคตอันใกล้