Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Refactoring là việc cải thiện cấu trúc bên trong của code mà không thay đổi hành vi bên ngoài. Nghe đơn giản nhưng nhiều người ngại vì sợ sửa xong thì hỏng. Thực ra, nếu làm theo từng bước nhỏ và có lưới an toàn, refactor là một trong những việc ít rủi ro nhất và có lợi nhất.
Refactor không phải là thêm tính năng, cũng không phải sửa lỗi. Nó chỉ làm cho code dễ đọc, dễ mở rộng hơn: đổi tên, tách hàm, loại bỏ lặp, đơn giản hóa điều kiện. Quy tắc cốt lõi: đầu vào và đầu ra của hệ thống phải y nguyên trước và sau khi refactor.
Vì vậy hãy tách bạch hai việc: khi đang thêm tính năng thì không refactor lớn, và khi refactor thì không thêm tính năng. Làm lẫn hai việc, nếu có lỗi bạn không biết do đâu.
Trước khi đụng vào code, hãy chắc rằng bạn có cách kiểm tra hành vi vẫn đúng:
Nguyên tắc vàng là mỗi bước đủ nhỏ để nếu hỏng, bạn biết ngay vì sao. Một nhịp làm việc điển hình:
git checkout . hoặc Ctrl+Z) và thử cách khác.Đoạn code trước khi refactor:
function getShippingFee(order) {if (order !== null) {if (order.total > 500000) {return 0;} else {if (order.isRemote) {return 50000;} else {return 30000;}}} else {return 0;}}Sau khi refactor từng bước (guard clause, bỏ else thừa, đặt hằng số có tên):
const FREE_SHIPPING_THRESHOLD = 500000;const REMOTE_FEE = 50000;const STANDARD_FEE = 30000;function getShippingFee(order) {if (order === null) return 0;if (order.total > FREE_SHIPPING_THRESHOLD) return 0;return order.isRemote ? REMOTE_FEE : STANDARD_FEE;}Hành vi giữ nguyên nhưng đọc gọn và rõ hơn nhiều. Các giá trị 500000, 50000, 30000 giờ có tên để người đọc hiểu ý nghĩa.
| Kỹ thuật | Khi nào dùng |
|---|---|
| Rename (đổi tên) | Tên biến, hàm không nói lên ý nghĩa |
| Extract Function | Hàm dài, một đoạn code làm việc riêng |
| Inline | Hàm hoặc biến tạm không đem lại giá trị |
| Replace Magic Number | Con số hoặc chuỗi xuất hiện không rõ nghĩa |
| Introduce Parameter Object | Hàm có quá nhiều tham số đi cùng nhau |
| Remove Dead Code | Code không bao giờ được gọi |
Hãy tận dụng chức năng refactor tự động của IDE (rename, extract, move). Chúng cập nhật mọi nơi tham chiếu nên ít sai sót hơn sửa tay.
Commit refactor riêng biệt với commit thay đổi hành vi, và ghi rõ trong message (ví dụ "refactor: tách hàm tính phí vận chuyển"). Người review sẽ dễ dàng hơn vì biết chỉ cần kiểm tra là hành vi không đổi. Tránh gộp refactor khổng lồ vào một pull request lớn, hãy chia nhỏ.
Refactoring không phải một dự án riêng cần xin phép, mà là thói quen nhỏ hằng ngày: để lại code sạch hơn một chút so với lúc bạn tìm thấy nó. Có test, bước nhỏ, commit thường xuyên là đủ để làm việc này một cách tự tin.
Nếu bạn muốn rèn kỹ năng đọc hiểu và cải thiện code qua các dự án thực hành, hãy xem qua các khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment