วันนี้อ่านบทความเรื่อง Java legacy hairball: refactoring case-study
ทำการอธิบายถึงการ refactor legacy code
ว่ามีแนวคิดและขั้นตอนอย่างไรบ้าง ?
ซึ่งมีความน่าสนใจอย่างมาก
จึงนำมาสรุปไว้นิดหน่อย
สิ่งที่ผมชอบมาก ๆ คือ ทำไมสิ่งที่เราออกแบบมักจะแตกต่างจากสิ่งที่สร้างขึ้นมา ?
เริ่มด้วยสิ่งที่เราออกแบบ
ทำการแยกส่วนการทำงานของระบบชัดเจนมาก ทั้ง 2-tier, 3-tier หรือ n-tier ทำการแยก service ออกเป็นกลุ่ม ๆ อย่างสวยงาม มันสวยงามและเป็นระเบียบมาก เมื่ออยู่ในรูปแบบเอกสาร และ diagram ต่าง ๆ แสดงดังรูปแต่เมื่อทำการพัฒนาระบบจากสิ่งที่ออกแบบ กลับพบว่ามันต่างกันโดยสิ้นเชิง
ยกตัวอย่างเช่นในส่วนของ Business tier โดย code ของแต่ละส่วนจะผูกมัดกันอย่างมากมาย (Tight coupling) บางครั้งเรียกว่ายุ่งเหยิงเลยก็ว่าได้ แสดงดังรูปคำถามก็คือ เราออกแบบไปทำไม ?
ทั้ง ๆ ที่การพัฒนาระบบไม่เหมือนการออกแบบเลย หรือเราไม่สนใจว่าจะออกแบบมาแบบไหน เราจะพัฒนาตามใจของฉันเอง ทำให้มันเสร็จ ๆ ก็พอ หรือว่าคนออกแบบเคยเข้ามาดูหรือเปล่าว่า สิ่งที่ออกแบบไปนั้นถูกสร้างตามหรือไม่ ? สิ่งที่ออกแบบไปนั้นมันมีประโยชน์หรือไม่ ? สิ่งที่ออกแบบมีใครสนใจหรือไม่ ? หรือว่าเราในฐานะนักพัฒนาไม่ได้ใส่ใจในการพัฒนาระบบเลยสุดท้ายแล้วลองถามตัวเราเองสิว่า สิ่งที่ออกแบบกับสิ่งที่สร้างหรือพัฒนาขึ้นมานั้น มันเหมือนหรือต่างกันอย่างไร ?