PHP:
Tái cấu trúc mã

Làm thế nào:

Hãy lấy một đoạn PHP điển hình và áp dụng một số phép màu refactoring vào nó.

Trước khi refactoring, mã của chúng ta có thể trông như thế này:

function printOrderDetails($order) {
    foreach ($order as $item) {
        echo "Item: " . $item['name'];
        echo " - Price: " . $item['price'];
        echo "<br>";
    }
    
    if (!empty($order)) {
        echo "Total: " . array_sum(array_column($order, 'price'));
    }
}

Nhưng chúng ta có thể refactor đoạn mã này để cải thiện sự rõ ràng và tính module của nó:

function printItem($item) {
    echo "Item: {$item['name']} - Price: {$item['price']}<br>";
}

function calculateTotal($order) {
    return array_sum(array_column($order, 'price'));
}

function printOrderDetails(array $order) {
    array_walk($order, 'printItem');

    if (!empty($order)) {
        echo "Total: " . calculateTotal($order);
    }
}

Bằng cách phân chia hàm printOrderDetails thành các hàm nhỏ hơn, mã của chúng ta trở nên dễ đọc và dễ gỡ lỗi hơn.

Sâu hơn

Refactoring có nguồn gốc từ cộng đồng lập trình smalltalk vào đầu những năm 1990 và được phổ biến thêm bởi cuốn sách điển hình của Martin Fowler “Refactoring: Improving the Design of Existing Code” (1999). Dù refactoring có thể được áp dụng cho bất kỳ ngôn ngữ lập trình nào, bản chất động của PHP cho phép một số thách thức và cơ hội độc đáo.

Các phương án thay thế cho việc refactoring có thể bao gồm việc viết lại mã từ đầu, điều này thường rủi ro và tốn thời gian hơn. Trong hệ sinh thái PHP, các công cụ như PHPStan và Rector có thể tự động nhận diện và thực hiện một số hoạt động refactoring, tương ứng. Về mặt thực hiện, việc giữ cho refactoring nhỏ gọn và thử nghiệm rộng rãi với các unit test là những thực hành chính để đảm bảo refactoring thành công mà không giới thiệu lỗi.

Xem thêm