Java:
การปรับโครงสร้างโค้ด
วิธีทำ:
ลองดูคลาส Java แบบง่ายๆ ที่ต้องการการรีแฟคเตอร์เนื่องจากมีการจัดการและความชัดเจนที่ไม่ดี
public class Calculator {
public int calc(int op1, int op2, String operation) {
if (operation.equals("add")) {
return op1 + op2;
} else if (operation.equals("subtract")) {
return op1 - op2;
} // การดำเนินการอื่นๆ...
}
}
หลังจากรีแฟคเตอร์ เรามี:
public class Calculator {
public int add(int operand1, int operand2) {
return operand1 + operand2;
}
public int subtract(int operand1, int operand2) {
return operand1 - operand2;
}
// การดำเนินการอื่นๆ...
}
โดยการรีแฟคเตอร์ เราได้ปรับปรุงชื่อและพารามิเตอร์ของเมธอดเพื่อความสามารถในการอ่าน และลบการใช้งานสาขาเงื่อนไขภายในเมธอดเดียว การดำเนินการแต่ละอย่างตอนนี้ระบุวัตถุประสงค์ของมันอย่างชัดเจน
ลึกเข้าไป:
การรีแฟคเตอร์มีต้นกำเนิดในชุมชน Smalltalk ด้วยความสนใจในความสามารถในการอ่านโค้ดและการออกแบบที่เน้นวัตถุ (object-oriented design) แต่มันจริงๆ เริ่มติดตลาดในโลกของ Java ในช่วงปลายปี 90 และต้นปี 00 โดยเฉพาะหลังจากการเผยแพร่หนังสือสำคัญของ Martin Fowler ที่ชื่อว่า “Refactoring: Improving the Design of Existing Code.”
มีทางเลือกอื่นนอกจากการรีแฟคเตอร์ เช่น เขียนโค้ดจากเริ่มต้นใหม่ อย่างไรก็ตาม การรีแฟคเตอร์มักจะได้รับความนิยมเพราะว่ามันเกี่ยวข้องกับการเปลี่ยนแปลงทีละน้อยที่ไม่ทำให้ฟังก์ชันก์ชันของแอปพลิเคชันต้องหยุดชะงัก
รายละเอียดการดำเนินการเมื่อรีแฟคเตอร์ใน Java (หรือภาษาโปรแกรมอื่นๆ) ต้องการความเข้าใจเกี่ยวกับกลิ่นโค้ด — ตัวบ่งชี้ของปัญหาลึกๆ ในโค้ด กลิ่นบางอย่างรวมถึงเมธอดยาวๆ, คลาสใหญ่, โค้ดที่ซ้ำกัน และการใช้งานรูปแบบพื้นฐานมากเกินไป โดยการใช้รูปแบบการรีแฟคเตอร์ เช่น Extract Method, Move Method, หรือ Replace Temp with Query, นักพัฒนาสามารถจัดการกับกลิ่นเหล่านี้ได้อย่างเป็นระบบในขณะที่รักษาโค้ดให้ทำงานได้ตลอดเวลา
เครื่องมืออัตโนมัติ เช่น การรองรับการรีแฟคเตอร์ของ IntelliJ IDEA หรือปลั๊กอินสำหรับ Eclipse สามารถช่วยในกระบวนการด้วยการทำ automation การรีแฟคเตอร์ เช่น การเปลี่ยนชื่อตัวแปร เมธอด และคลาส การแยกเมธอดหรือตัวแปรออกมา และการย้ายเมธอดหรือคลาสไปยังแพ็คเกจหรือเนมสเปซที่แตกต่างกัน
ดูเพิ่มเติม:
- หนังสือของ Martin Fowler “Refactoring: Improving the Design of Existing Code”: https://martinfowler.com/books/refactoring.html
- เทคนิคการรีแฟคเตอร์บน Refactoring.Guru: https://refactoring.guru/refactoring/techniques
- การรีแฟคเตอร์อัตโนมัติใน Eclipse: https://www.eclipse.org/eclipse/news/4.18/jdt.php
- คุณสมบัติการรีแฟคเตอร์ของ IntelliJ IDEA: https://www.jetbrains.com/idea/features/refactoring.html
แต่ละทรัพยากรนี้ให้พื้นฐานในการเข้าใจหลักการของการรีแฟคเตอร์หรือเครื่องมือที่สามารถใช้ในการนำหลักการเหล่านี้ไปใช้ได้