การเขียนโค้ดซ้ำซ้อน (Code Duplication) เทียบกับ การสร้าง Abstraction ที่ผิดพลาด (Wrong Abstractions)

นักพัฒนามักต้องเผชิญกับความลำบากในการตัดสินใจ

คุณต้องเลือกระหว่างหลักการ Don't Repeat Yourself หรือการยอมให้มีการเขียนโค้ดซ้ำซ้อนบ้าง

DRY คือกฎหลักในการออกแบบซอฟต์แวร์ แต่การพยายามทำตามกฎนี้อย่างสุดโต่งเกินไปจะสร้างปัญหาใหม่ นั่นคือคุณกำลังสร้าง Abstraction ที่ผิดพลาด

การสร้าง Abstraction ที่ผิดพลาดนั้นมีต้นทุนสูงกว่าการเขียนโค้ดซ้ำซ้อน

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

แต่การสร้าง Abstraction เร็วเกินไป (premature abstraction) จะทำลายความเร็วของโปรเจกต์ และทำให้ความง่ายในการดูแลรักษาโค้ดพังทลายลง

เมื่อคุณสร้าง Abstraction เร็วเกินไป คุณจะพบกับปัญหาเหล่านี้:

  • ความซับซ้อนที่เพิ่มขึ้น: Abstraction ที่ไม่ดีจะเพิ่มชั้นของความสับสน
  • โค้ดที่ขาดความยืดหยุ่น: มันจะกลายเป็นเรื่องยากที่จะแก้ไขส่วนหนึ่งโดยไม่ไปกระทบส่วนอื่นๆ
  • ตรรกะที่ซ่อนเร้น: คุณต้องใช้เวลาในการไล่สายโค้ด (tracing) มากกว่าเวลาที่ใช้เขียนมันเสียอีก

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

อย่าเพิ่งสร้างโซลูชันแบบทั่วไป (generic solution) สำหรับปัญหาที่คุณยังไม่เข้าใจอย่างถ่องแท้ จงรอจนกว่ารูปแบบ (pattern) จะชัดเจนเสียก่อน

ที่มา: https://dev.to/kelvin_kariuki_20f4bec616/developer-take-on-code-duplication-is-far-cheaper-than-the-wrong-abstraction-2016-2k3n