การเขียนโค้ดซ้ำซ้อน (Code Duplication) เทียบกับ การสร้าง Abstraction ที่ผิดพลาด (Wrong Abstractions)
นักพัฒนามักต้องเผชิญกับความลำบากในการตัดสินใจ
คุณต้องเลือกระหว่างหลักการ Don't Repeat Yourself หรือการยอมให้มีการเขียนโค้ดซ้ำซ้อนบ้าง
DRY คือกฎหลักในการออกแบบซอฟต์แวร์ แต่การพยายามทำตามกฎนี้อย่างสุดโต่งเกินไปจะสร้างปัญหาใหม่ นั่นคือคุณกำลังสร้าง Abstraction ที่ผิดพลาด
การสร้าง Abstraction ที่ผิดพลาดนั้นมีต้นทุนสูงกว่าการเขียนโค้ดซ้ำซ้อน
เราต้องการเขียนโค้ดที่สง่างาม (elegant) เราต้องการสร้างตรรกะที่นำกลับมาใช้ใหม่ได้ เราต้องการแก้ไขบั๊กเพียงจุดเดียวแล้วให้มันถูกแก้ไขในทุกๆ ที่ เป้าหมายนี้ดูเหมือนจะเป็นสิ่งที่ถูกต้อง
แต่การสร้าง Abstraction เร็วเกินไป (premature abstraction) จะทำลายความเร็วของโปรเจกต์ และทำให้ความง่ายในการดูแลรักษาโค้ดพังทลายลง
เมื่อคุณสร้าง Abstraction เร็วเกินไป คุณจะพบกับปัญหาเหล่านี้:
- ความซับซ้อนที่เพิ่มขึ้น: Abstraction ที่ไม่ดีจะเพิ่มชั้นของความสับสน
- โค้ดที่ขาดความยืดหยุ่น: มันจะกลายเป็นเรื่องยากที่จะแก้ไขส่วนหนึ่งโดยไม่ไปกระทบส่วนอื่นๆ
- ตรรกะที่ซ่อนเร้น: คุณต้องใช้เวลาในการไล่สายโค้ด (tracing) มากกว่าเวลาที่ใช้เขียนมันเสียอีก
ในบางครั้ง การเขียนโค้ดซ้ำซ้อนก็เป็นทางเลือกที่เน้นการใช้งานจริง (pragmatic) มันช่วยให้โค้ดของคุณเรียบง่ายและชัดเจน และช่วยให้คุณสามารถเปลี่ยนแปลงส่วนต่างๆ ของระบบได้อย่างเป็นอิสระ
อย่าเพิ่งสร้างโซลูชันแบบทั่วไป (generic solution) สำหรับปัญหาที่คุณยังไม่เข้าใจอย่างถ่องแท้ จงรอจนกว่ารูปแบบ (pattern) จะชัดเจนเสียก่อน