duplication
DRY
ย่อมาจาก Don’t Repeat Yourself
เป็นแนวคิดสำหรับการลดจำนวน code ที่ซ้ำซ้อน

WET ย่อมาจาก Write Everything Twice
เป็นแนวคิดที่ตรงข้ามกับ DRY โดยสิ้นเชิง

คำถามคือ
ในปัจจุบัน developer เขียน code กันแบบไหน
ระหว่าง DRY กับ WET ?

ถ้าตอบว่า WET !!!
แนะนำให้พยายาม ลด ละ เลิก
เพื่อทำให้ code มัน DRY
หรือลดจำนวน code ที่มันซ้ำซ้อนในหลายๆ จุดนั่นเอง

ข้อดีของ DRY ประกอบไปด้วย

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

เท่าที่พบเจอคือ developer ชอบ copy-and-paste จากที่หนึ่งไปใช้งานอีกที่หนึ่ง
ซึ่งถามว่า มันทำงานได้ไหม
ตอบได้เลยว่า ได้
แต่มันคือการสร้าง code ที่ซ้ำซ้อนขึ้นมา
แถม developer เป็นคนที่ขี้ลืมอีกด้วยว่า
ทำอะไรไปแล้วบ้าง
ทำอะไรตรงไหนไปบ้าง

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

ดังนั้น ถ้าต้องการปฏิบัติตามแนวคิด DRY แล้ว
developer ต้องใช้ความพยายามอย่างมาก
ในการเขียน code ให้อ่านง่ายนั่นเอง

เรื่องที่สามคือ การ reuse code
การ reuse เป็นผลมาจาก การที่เราพบเจอ code ที่ซ้ำซ้อนตั้งแต่ 2 ที่ขึ้นไป
ทำให้เราทำการรวมการทำงานนั้นไว้ที่เดียว
ดังนั้น การ reuse จะเกิดมาเมื่อ code มันซ้ำซ้อนนั่นเอง
ส่งผลทำให้การพัฒนาระบบงานเร็วขึ้น

เรื่องที่สี่ คือ ค่าใช้จ่ายในการพัฒนา และ แก้ไขลดลง
ยิ่ง code มีจำนวนมากเท่าไร
จำนวนคนดูแลก็ต้องมากเท่านั้น
นั่นคือเป็นการเพิ่มค่าใช้จ่ายนั่นเอง
ทั้งค่าใช้จ่ายจากการพัฒนา
ทั้งค่าใช้จ่ายจากการทดสอบ
ทั้งค่าใช้จ่ายจากการแก้ไข bug

สุดท้ายมันจะส่งผลออกไปยังลูกค้าหรือผู้ใช้งานต่อไป !!

เรื่องที่ห้าคือ การทดสอบ
ลองคิดดูสิ ถ้า code มันซ้ำซ้อนมาก ๆ
การทดสอบก็ต้องมากเช่นกัน
แต่ถ้าแก้ไข code ซ้ำ ๆ ออกไป
การทดสอบก็ลดลงไปมาก

การทำตามแนวคิด DRY ก็ต้องใช้แบบมีสติด้วยเช่นกัน

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

หรือบางครั้งทำเยอะเกินไป หรือ Over DRY !!
ก็อาจจะทำให้ code อ่านยาก เข้าใจยากขึ้นไปอีก
ซึ่งเป็นสิ่งที่บอกว่า คุณกำลังหลงทาง

และแนวคิด DRY นั้น ไม่ได้ใช้เฉพาะ code เท่านั้นนะ
แต่สามารถนำไปใช้กับสิ่งอื่น ๆ ได้อีก
เช่น Document, Database design และ testing เป็นต้น

สุดท้ายแล้ว

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

ถ้าคุณต้องการพร้อมรับต่อการเปลี่ยนแปลงอยู่อย่างเสมอ
จำเป็นต้องปรับปรุง code ให้พร้อมด้วย

Reference Websites
https://dzone.com/articles/is-your-code-dry-or-wet
http://c2.com/cgi/wiki?DeveloperBillOfRights