ตัวอย่างการคำนวณที่ขัดแย้งกับเครื่องคิดเลขของตัวเอง

ผมทำเว็บไซต์สำหรับคำนวณค่าใช้จ่ายในการปรับปรุงบ้าน

แต่ละหน้าจะแสดงค่าใช้จ่ายใน 4 จุด:

ผมพบข้อผิดพลาด (bug) ครั้งใหญ่ ตัวอย่างที่เป็นข้อความระบุว่าโครงการมีค่าใช้จ่าย $62,300 แต่ในวิดเจ็ตกลับบอกว่าโครงการเดียวกันนั้นมีค่าใช้จ่าย $56,779

มีส่วนต่างอยู่ถึง $5,500

ตัวเลขเหล่านี้ไม่ได้เกิดขึ้นแบบสุ่ม แต่มันมาจากสมมติฐานที่ซ่อนอยู่ต่างกัน ข้อความที่เขียนไว้สมมติว่าต้องเปลี่ยนเครื่อง HVAC ใหม่ ส่วนวิดเจ็ตสมมติว่าคุณจะใช้ระบบเดิมที่มีอยู่ ทั้งสองแบบไม่ได้ผิด แต่พวกมันไม่ได้เชื่อมโยงข้อมูลถึงกัน

นี่คือความล้มเหลวที่เกิดขึ้นได้บ่อย เมื่อคุณเก็บข้อมูลชุดเดียวกันไว้ในสองที่ ข้อมูลเหล่านั้นจะเริ่มคลาดเคลื่อนออกจากกัน คุณไม่ได้แค่ทำเนื้อหาซ้ำซ้อน แต่คุณกำลังทำข้อมูลซ้ำซ้อน

ผมแก้ไขเรื่องนี้ด้วยกฎที่ผมเรียกว่า source-first ซึ่งมีสองส่วน

ส่วนที่หนึ่ง: ค่าใช้จ่ายต้องมีอยู่เพียงที่เดียวเท่านั้น

ผมเลิกพิมพ์ตัวเลขลงในข้อความและตาราง แต่ตอนนี้ ฟังก์ชันเครื่องคิดเลขคือแหล่งข้อมูลเพียงหนึ่งเดียว ตารางและตัวอย่างที่เป็นข้อความจะดึงตัวเลขโดยตรงจากฟังก์ชันนั้นในระหว่างกระบวนการ build หากฟังก์ชันเปลี่ยน ตัวเลขทุกตัวบนหน้าเว็บก็จะเปลี่ยนตามโดยอัตโนมัติ คุณจะไม่มีทางพบข้อมูลที่ไม่ตรงกัน เพราะตัวเลขเหล่านั้นคือค่าเดียวกัน

ส่วนที่สอง: ตัวเลขทุกตัวต้องแสดงที่มาของมัน

ข้อมูลค่าใช้จ่ายไม่ใช่ข้อเท็จจริงที่คงอยู่ตลอดไป แต่มันมีวันหมดอายุ ผมจึงเพิ่ม data object เล็กๆ เข้าไปในการคำนวณทุกครั้ง ซึ่งจะแสดง:

สิ่งนี้ช่วยให้ข้อมูลมีความโปร่งใสและถูกต้อง หากข้อมูลต้นทางผิด เว็บไซต์ทั้งเว็บก็จะผิดไปด้วย แต่อย่างน้อยเว็บไซต์ก็จะมีความสอดคล้องกัน หากผู้ใช้พบความขัดแย้งของข้อมูลทันที นั่นจะทำลายความเชื่อมั่นลง

บทเรียนนี้เรียบง่ายมาก:

ผมใช้เวลาทั้งวันไปกับการลบตัวเลขแทนที่จะเขียนมันขึ้นมา ตอนนี้ codebase ของผมเล็กลง และมันไม่โกหกผู้ใช้งานของผมอีกต่อไป

Source: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9