Duplicate Code
ว่าด้วยเรื่อง Code Smell หรือ Bad Smell หนึ่งในเรื่องนี้ที่พบบ่อย คือ Duplicate Code คือ Code ที่มีความซ้ำซ้อนกัน มีการ Copy & Paste ไว้หลาย ๆ ที่
Duplicate Code คือ ?
Code ที่มีความซ้ำซ้อน มีลักษณะการทำงานที่เหมือน หรือ คล้ายกัน เหตุผลหนึ่งที่ทำให้เกิดขึ้น คือ การที่ Programmer ทำงานเป็นทีม แล้ว ไม่รู้ว่า มีการเขียนการทำงานในลักษณะคล้ายกันไปแล้ว จึงเขียนขึ้นมาใหม่เพื่อให้ทำงานตามความต้องการของตัวเอง
เมื่อได้เกริ่นนำเกี่ยวกับ Duplicate Code กันไปแล้ว วันก่อน ผมได้ไปให้คำปรึกษากับ น.ศ. ที่มหาวิทยาลัยแห่งหนึ่ง ย่านบางแสน น้อง ๆ ได้เขียนโปรแกรมมาให้ 1 ระบบ เป็นระบบที่เขียนด้วย CI (CodeIgniter) เมื่อให้น้องอธิบายการทำงานของระบบแล้ว ให้ลองเปิด Code ให้ดู พร้อม อธิบาย Code นั้น
สิ่งที่พบก็คือ Duplicate Code !!! พระเจ้าช่วยกล้วยทอด
จากภาพ จะสังเกตุ ว่า น้อง ๆ ได้เขียน model ที่มีลักษณะการทำงานเหมือนกัน ต่างกันแค่ทำงานกับ ฐานข้อมูล คนละตาราง ซึ่งจะว่าไปก็ไม่ใช่เรื่องผิด เพราะน้อง ๆ ถูกสอนให้เขียนมาแบบนี้ แต่ผมได้ตั้งคำถามให้น้องไปประมาณนี้ คือ
- ถ้ามีการเพิ่ม column ในตาราง จะเกิดอะไรขึ้น ? ต้องมาแก้ model นี้ เพิ่ม argument เพิ่มชื่อ column แล้ว controller ที่มีการเรียกใช้ model นี้ จะมีปัญหาหรือไม่ ?
- ถ้ามีการปรับปรุงระบบโดยการเพิ่ม Table ใน Database ต้องมา เพิ่ม files ประเภทนี้อีกใช่มั้ย ?
- จากตัวอย่าง จะเห็นใน บรรทัดที่ 44 มีการพิมพ์คำสั่ง update ผิด แปลว่า มีการ copy & paste Code ชุดนี้ แสดงว่า ต้องไล่แก้หมดทุกที่ที่ผิดแบบนี้ ซึ่งนานไปอาจจำไม่ได้ว่า copy ไปวางไว้ที่ไหนบ้าง อันไหนที่แก้แล้ว หรือยังไม่ได้แก้
แค่ 3 เหตุผลนี้ ก็น่าจะเพียงพอให้เราน่าจะหาทางที่ดีกว่านี้
Get seksan panngam’s stories in your inbox
Join Medium for free to get updates from this writer.
สำหรับสถานการณ์ นี้ผมจึงแนะนำให้เขียน function ใหม่ เพื่อ ทำการ insert update delete และใช้เป็น function กลางสำหรับการทำงานทำนองนี้ โดยสามารถใช้ร่วมกันหลาย ๆ Column & Table ที่มีความแตกต่างกัน โดยทำให้ function นี้มีความฉลาดขึ้น
จากตัวอย่าง รูปด้านบน ฝั่งซ้าย function insert ของน้อง ๆ ที่ทำมา จะใส่ argument เป็น Data ของ Column ที่อยู่ใน Database แล้วเอามาประกอบใส่ใน array แล้วจึงใช้คำสั่ง insert ของ DB เข้าไปใน DB
เราสามารถปรับเป็นแบบ รูปบนด้านขวา Function add จะรับ argument มา 2 ตัว คือ table และ data ที่ต้องการ insert ตัว data ก็ส่งมาเป็น array มาได้เลย โดยใช้ index ของ array เป็นชื่อ column ใน table พร้อม ระบุข้อมูลที่ต้องการบันทึก ลงไป เท่านี้ function add นี้ ก็สามารถใช้เป็น Function กลาง ที่ Global function ที่ ใครก็สามารถมาเรียกใช้ได้แล้ว โดยไม่สนใจว่า จะมีกี่ Table กี่ column
ด้วยการปรับแบบนี้ ก็น่าจะทำให้ Programmer ทำงานได้ง่ายขึ้น
แถมอีกนิด ตัวอย่าง Function ในการ Get ข้อมูล ในแบบของผม เผื่อจะเป็นประโยชน์ กับทุกคน
ผิดพลาดประการใด ขออภัยไว้ ณ. ที่นี้ด้วยนะครับ และ ยินดีรับฟัง หากมีคำแนะนำดี ๆ เพิ่มเติมได้นะครับ ขอบคุณครับ








