Tại sao tái cấu trúc lại tốt

Mã nguồn có hai phạm vi giá trị: những gì nó làm được bây giờ, và những gì nó sẽ làm được vào những ngày sau. Phần lớn thời gian chúng ta tập trung vào những gì mã nguồn làm được vào ngày hôm nay. Mỗi khi chúng ta sửa lỗi hay thêm chức năng, chúng ta tạo giá trị cho mã nguồn ngày hôm nay bằng cách tăng khả năng của nó.

Bạn không thể viết mã mãi được nếu không nhận thức được rằng mã hiện tại chỉ là một phần của câu chuyện, một góc nhỏ trong bức tranh tổng thể của mã nguồn khi nhìn bằng con mắt bốn chiều. Nếu bạn vẽ được góc bức tranh hôm nay nhưng khiến cho bức tranh không thể vẽ tiếp được, chúng ta không thể gọi đó là hiệu quả.

Và mặc dù biết như vậy, bạn cũng không thể dự chắc được điều gì về mã nguồn của ngày mai. Có thể bạn sẽ viết cái này, có thể bạn sẽ viết cái kia, cũng có thể là một cái gì đó bạn chưa bao giờ nghĩ đến. Nhưng nếu bạn không có hành động gì cho ngày mai, ngày mai đáng lẽ phải đến sẽ không bao giờ đến.

Tái cấu trúc chính là chuẩn bị. Nếu bạn thấy những phương án của ngày hôm qua trở nên vô nghĩa vào ngày hôm nay, hãy thay đổi phương án. Rồi thì bạn có thể yên tâm làm công việc của hôm nay. Ngày mai nếu việc đó tái diễn, bạn hãy tiếp tục.

Tại sao tái cấu trúc lại có tác dụng? Vậy tại sao chương trình lại khó viết? Chúng ta thường gặp khó ở bốn điểm:

  • Những chương trình khó đọc thì khó sửa
  • Những chương trình logic lặp lại thì khó sửa
  • Những chương trình đòi hỏi bạn sửa cả những hành vi khác khi bạn thực hiện một thay đổi, thì khó sửa
  • Những chương trình có nhiều logic rẽ nhánh phức tạp thì khó sửa

Vậy là chúng ta sẽ muốn chương trình của chúng ta dễ đọc, mỗi logic nằm ở một và chỉ một vị trí, không bắt chúng ta phải thực hiện những thay đổi nguy hiểm trên những chức năng khác có sẵn, và các logic điều kiện được thể hiện đơn giản hết mức có thể.

Tái cấu trúc không làm thay đổi chức năng của chương trình, nhưng tái cấu trúc giúp chúng ta tất cả những điều trên. Thế nên tái cấu trúc giúp chúng ta viết mã hiệu quả hơn.

Loading

Leave a Reply

Your email address will not be published. Required fields are marked *