Tôi thực sự đã trải qua một lần tái cấu trúc khá quan trọng ba lần trong sự nghiệp của mình. Mã có xu hướng phân rã, vì vậy nếu cơ sở mã của bạn đủ dài, một bộ tái cấu trúc lớn là điều không thể tránh khỏi. Tất cả các ví dụ của tôi là trên cơ sở mã riêng, điều này có thể giải thích tại sao các ví dụ công khai khó tìm.
Lần đầu tiên là một ứng dụng, dù tin hay không, có kiến trúc cơ bản khiến nó chỉ hoạt động với máy in ma trận điểm. Khi công ty của tôi không còn tìm được nhà cung cấp để cung cấp ruy băng nữa, họ đã giao cho tôi làm cho nó hoạt động với máy in laser.
Lần thứ hai là sự di chuyển của hàng trăm tập lệnh thử nghiệm tự động từ C sang Java, một phần vì chúng tôi cần khả năng đa nền tảng tốt hơn và một phần vì việc thuê các nhà phát triển C mới trở nên khó khăn.
Lần thứ ba tôi vẫn ở giữa, đó là mô đun hóa một ứng dụng nguyên khối khổng lồ để cho phép thử nghiệm đơn vị bằng cách giảm khớp nối và cho các mục đích đa nền tảng.
Tôi so sánh nỗ lực leo lên một ngọn núi. Bạn có mục tiêu to lớn này trước mắt, nhưng bạn không giải quyết nó ở cấp độ vĩ mô. Bạn cầm nó một tay tại một thời điểm, luôn có vị trí dự phòng chặt chẽ, không bao giờ ngắt kết nối an toàn trước đó cho đến khi vị trí tiếp theo được đặt đúng chỗ. Bạn bắt đầu chỉ thực hiện những cải tiến nhỏ dần, và sau một lúc bạn quay lại và đột nhiên khung cảnh tuyệt đẹp này.
Ví dụ, giả sử bạn có 60.000 tệp mã được ghép nối cao. Bạn muốn bắt đầu đặt nó dưới bài kiểm tra đơn vị, nhưng sự phụ thuộc làm cho nó không thể. Làm thế nào để bạn sửa chữa nó? Bạn tách một tập tin. Bạn thêm các bài kiểm tra tự động. Bạn quay trở lại mặt đất ổn định trước khi di chuyển trên. Lặp lại 59.999 lần.
Nếu đó là những âm thanh đơn giản, đó là vì nó là đơn giản. Nó không dễ, nhưng nó đơn giản. Lúc đầu thật khó để nhận thấy bất kỳ tiến triển nào. Chúng tôi mất hai năm để trở thành một công cụ tái cấu trúc bất khả thi và có thể sẽ đi trước chúng tôi nhiều năm cho đến khi chúng tôi hoàn thành, nhưng nhìn lại chúng tôi nhận ra rằng mã đã nhận được tốt hơn bao nhiêu và chúng tôi đã có thể tiếp tục cung cấp chức năng mới cho khách hàng của chúng tôi trong thời gian trung bình.
Hai lần khác làm việc theo cùng một cách. Bạn tìm thấy bước an toàn nhỏ nhất bạn có thể thực hiện và bạn thực hiện nó, luôn giữ ứng dụng ở trạng thái hoạt động. Bạn chỉ lo lắng về bức tranh lớn để đảm bảo bạn đang đi đúng hướng. Tất cả các hành động của bạn là nhỏ, ổn định và gia tăng.