Tái cấu trúc là - và nên là - một quá trình đang diễn ra. Nó không đủ để chỉ đáp ứng các yêu cầu với một triển khai đã được thử nghiệm và vẫn chưa hoàn thiện.
"Làm cho nó hoạt động, sau đó làm cho nó hoạt động tốt hơn" .
Tôi không thể nhớ mình đã đọc câu trích dẫn đó ở đâu, nhưng đây là chìa khóa để áp dụng tái cấu trúc tốt và tôi cho rằng nó không chuyên nghiệp để làm khác.
Tái cấu trúc liên tục giống như quét sạch các vết đổ trong khi bạn đang nấu ăn, và làm sạch các món ăn của bạn sau khi bạn ăn xong. Tái cấu trúc mục tiêu giống như tìm một nhà bếp bẩn, nhưng chỉ có thời gian để rửa một hoặc hai ly bẩn. Bạn có muốn sống với một nhà bếp bẩn liên tục, hoặc bạn muốn giữ mọi thứ sạch sẽ khi bạn đi cùng?
Bạn nhận được mã để làm việc, sau đó bạn cấu trúc lại mã của mình để đảm bảo rằng bạn có triển khai tốt nhất bạn có thể sử dụng. Nếu bạn đang làm một cái gì đó quen thuộc, có thể là lần đầu tiên bạn triển khai mã tốt nhất, tuy nhiên phải mất một chút thời gian để kiểm tra lại công việc của bạn để chắc chắn. Nếu có vẻ như bạn có thể cải thiện mã của mình, thì bạn cố gắng cấu trúc lại để đảm bảo mã của bạn ít nhất là gọn gàng và sạch sẽ như bạn có thể làm được. Điều này có nghĩa là bạn đang giảm số nợ kỹ thuật mà bạn để lại và bạn sẽ dễ đọc và tái cấu trúc hơn vào lần tiếp theo khi mã cần được xử lý. Đây là giá trị cốt lõi đằng sau câu thần chú TDD "Red-Green-Refactor", ngoại trừ trường hợp trong TDD bạn tái cấu trúc chủ yếu để loại bỏ trùng lặp, nó cũng trả tiền để xem xét các mục khác có thể được tái cấu trúc, chẳng hạn như các lớp lớn, phương thức dài,
Nếu bạn thấy mình phải đối mặt với một thiết kế lại lớn, thì có lẽ bạn có thể tắt nó trong một thời gian, đặc biệt nếu bạn đang chạy rất thấp trong thời gian trong lịch trình của bạn. Tuy nhiên, điều này được cung cấp chức năng của mã của bạn sẽ không bị xâm phạm và cũng được cung cấp việc triển khai sẽ tiếp tục đáp ứng các yêu cầu. Loại tình huống này sẽ là một trường hợp hiếm gặp, và bạn có thể giúp đảm bảo nó thậm chí còn hiếm hơn nếu bạn liên tục tái cấu trúc khi bạn đi cùng. Tuy nhiên, điều quan trọng hơn nữa là bạn không thể mạo hiểm để lại những thay đổi lớn của mình quá lâu, nếu không, cuối cùng bạn sẽ tạo ra một khối lượng công việc lớn hơn, điều này có thể tốn kém hơn nhiều để sửa chữa, hoặc có thể dẫn đến tốn kém hơn nữa dự án thất bại.
Tôi có ấn tượng rằng nhiều người có xu hướng nhầm lẫn các định nghĩa cho Tái cấu trúc và Tái thiết kế . Hai thuật ngữ mô tả các chiến lược để quản lý các tình huống rất khác nhau. Nếu bạn muốn tái thiết kế, bạn đang cam kết thực hiện một thay đổi mạnh mẽ sẽ làm thay đổi hành vi của một hệ thống. Điều này sẽ làm mất hiệu lực một số bài kiểm tra, và cũng sẽ yêu cầu các bài kiểm tra mới. Khi bạn tái cấu trúc, bạn đảm bảo hệ thống của bạn tiếp tục hoạt động chính xácgiống như trước khi thay đổi, tuy nhiên bạn cũng đảm bảo rằng mã của bạn sẽ có tuổi thọ cao và sẽ dễ duy trì hơn theo thời gian. Bạn không "làm phiền" mã của bạn cho địa ngục của nó, bạn đang cam kết với một tiêu chuẩn chuyên nghiệp về mã sạch sẽ giảm nguy cơ thất bại và sẽ đảm bảo mã của bạn vẫn là một niềm vui để làm việc và theo tiêu chuẩn chuyên nghiệp .
Quay trở lại với các cửa sổ bị hỏng tương tự, nếu bạn phá vỡ cửa sổ, bạn nên sửa chữa nó ngay lập tức. Nếu bạn không nhận thấy rằng một cửa sổ bị hỏng, thì bạn cần phải quyết định chi phí cho bạn nếu bạn để cửa sổ bị hỏng. Bây giờ, lặp lại hai câu trước, nhưng thay thế Bug cho cửa sổ. Bạn cuối cùng cần một chiến lược khác. Nếu bạn đã tạo ra một lỗi khi bạn viết mã, bạn sẽ sửa nó ngay lập tức hoặc bạn xem liệu các thay đổi có yêu cầu nỗ lực tái thiết kế hay không và bạn sẽ đưa ra quyết định thương mại khi nào là tốt nhất để giải quyết vấn đề. Vì vậy, bạn không tái cấu trúc để khắc phục sự cố, bạn tái cấu trúc để đảm bảo việc tìm kiếm và khắc phục sự cố dễ dàng hơn. Tôi không quan tâm bạn nghĩ mã của bạn tuyệt vời như thế nào, các hệ thống phức tạp sẽ luôn có vấn đề cần được xử lý theo thời gian. Đây là những gì nợ kỹ thuật là tất cả, và tại sao tái cấu trúc cần phải là một quá trình liên tục khi bạn thực hiện mã của mình và không để lại trong một thời gian tương lai tùy ý.
Vì vậy, trong ngắn hạn, câu trả lời rằng đôi khi có thể chấp nhận được việc trì hoãn các thay đổi lớn đối với mã để đưa ra thời hạn, tuy nhiên không nên coi đó là cách làm thông thường để coi tái cấu trúc như một bài tập độc lập với công việc thực hiện hàng ngày của bạn, và chắc chắn không bao giờ được sử dụng như một cái cớ bởi các nhóm không quen thuộc với cơ sở mã như là một tùy chọn để tránh đảm bảo rằng việc triển khai của họ gọn gàng và sạch sẽ như họ có thể thực hiện trong các tình huống.