Thuật ngữ « legacy » thường được sử dụng như một từ đồng nghĩa với cũ hoặc tệ. Định nghĩa này gây hiểu lầm. Một ứng dụng thực sự trở thành legacy khi nó vẫn quan trọng đối với nghiệp vụ nhưng trở nên khó hiểu, khó chỉnh sửa, khó bảo mật hoặc khó được một đội ngũ mới khai thác.
Nó có thể dựa trên một công nghệ mới và đã được tích hợp rất nhiều. Ngược lại, một phần mềm cũ có thể vẫn hoàn toàn dễ bảo trì nhờ vào một kiến trúc rõ ràng, các bài kiểm tra đáng tin cậy và việc khai thác có kiểm soát.
Vì vậy, câu hỏi không phải là 'có nên viết lại mọi thứ không?', mà là 'lượng thay đổi cần thiết để khôi phục khả năng phát triển là bao nhiêu, với rủi ro nào và theo thứ tự nào?'.
Tại sao việc viết lại toàn bộ lại hấp dẫn đến vậy
Một cơ sở mã mới hứa hẹn sẽ loại bỏ những thỏa hiệp trong quá khứ, sử dụng các công cụ hiện đại và đơn giản hóa trải nghiệm. Trên lý thuyết, nó tránh phải hiểu từng chi tiết của những gì đã tồn tại. Trong thực tế, những quy tắc nghiệp vụ quan trọng nhất hiếm khi được ghi chép đầy đủ. Chúng tồn tại trong mã, dữ liệu, các quy trình thủ công và thói quen của người dùng.
Một việc viết lại do đó phải tái xây dựng cả phần mềm có thể nhìn thấy và tổng số các ngoại lệ của nó. Trong khi đó, ứng dụng hiện có tiếp tục phát triển, điều này tạo ra hai mục tiêu di chuyển. Việc chuyển đổi cuối cùng tập trung các rủi ro: di chuyển dữ liệu, tăng tải, đào tạo, liên kết và quay lại.
Điều đó không có nghĩa là việc viết lại luôn luôn là một sai lầm. Nó trở nên phù hợp khi sản phẩm thay đổi sâu sắc, khi mô hình dữ liệu không còn phù hợp, khi các thành phần không thể được tách rời, hoặc khi chi phí của một quá trình chuyển đổi dần dần vượt quá chi phí của một lần thay thế. Nhưng kết luận này phải được chứng minh, không được giả định.
Bắt đầu bằng việc lập bản đồ giá trị, không chỉ mã
Trước khi chọn một chiến lược, xác định các năng lực kinh doanh: lập hóa đơn, tìm kiếm, xuất bản, quản lý quyền, nhập khẩu, tính toán, thông báo, sản xuất báo cáo. Đối với từng năng lực, đánh giá mức độ quan trọng, tần suất thay đổi, sự hài lòng của người dùng và chất lượng kỹ thuật của thành phần thực hiện năng lực đó.
Bản đồ này tiết lộ bốn loại:
- ổn định và khác biệt : cần được duy trì và bảo vệ ;2. ổn định nhưng có thể chuẩn hóa: ứng cử cho một dịch vụ thị trường;3. bất ổn và phân biệt: ưu tiên hiện đại hóa;4. không ổn định và ít hữu ích: ứng cử viên để xóa.
Hiện đại hóa do đó trở thành một chương trình sản phẩm, chứ không phải là một chiến dịch làm sạch kỹ thuật.
Bảy chiến lược có thể
1. Bảo quản và đảm bảo an toàn
Khi ứng dụng thay đổi ít và thực hiện đúng vai trò của nó, quyết định tốt nhất có thể là duy trì nó. Người ta sửa các rủi ro nghiêm trọng, tự động hóa sao lưu, tăng cường giám sát và tài liệu hóa các hoạt động. Lựa chọn này tốn ít chi phí trong việc chuyển đổi nhưng cần phải chấp nhận một số hạn chế.
2. Tái nền tảng cơ sở hạ tầng
Ứng dụng về cơ bản vẫn không thay đổi, nhưng môi trường của nó đã được hiện đại hoá: hệ thống được hỗ trợ, container, cơ sở dữ liệu quản lý, pipeline triển khai, khả năng quan sát. Chiến lược này giảm rủi ro vận hành mà không giải quyết các vấn đề cấu trúc của mã.
3. Bao bọc phía sau các giao diện ổn định
Một API hoặc một lớp điều chỉnh tách hệ thống cũ khỏi các kênh mới. Việc đóng gói cho phép phát triển một giao diện mới, một ứng dụng di động hoặc một cổng thông tin đối tác mà không phơi bày trực tiếp mô hình lịch sử. Nó tạo ra một ranh giới hữu ích cho tương lai, với điều kiện không tái tạo tất cả những mâu thuẫn của hệ thống hiện có trong API.
4. Tái cấu trúc dần dần
Hành vi chức năng được bảo tồn trong khi cấu trúc nội bộ được cải thiện. Cách tiếp cận này hiệu quả khi các bài kiểm tra bảo vệ các luồng quan trọng và khi các nhóm có thể làm việc theo từng bước nhỏ. Nó khôi phục khả năng bảo trì mà không áp đặt việc di chuyển người dùng.
5. Thay một viên gạch mục tiêu
Xác thực, tìm kiếm, thanh toán, gửi email hoặc quản lý tài liệu có thể được trích xuất hoặc thay thế bằng một thành phần phù hợp hơn. Lợi ích sẽ nhanh chóng nếu giao diện với phần còn lại của hệ thống được kiểm soát. Tuy nhiên, cần phải tính đến chi phí định kỳ, khả năng đảo ngược và sự phụ thuộc vào dịch vụ mới.
6. Xây dựng một chuyển đổi kiểu « strangler »
Các tính năng mới được phát triển bên ngoài lõi lịch sử. Một bộ định tuyến, một lớp mặt tiền hoặc các sự kiện dần dần hướng các yêu cầu tới các module mới. Phạm vi cũ giảm dần cho đến khi có thể ngừng hoạt động. Chiến lược này hạn chế rủi ro chuyển đổi, nhưng đòi hỏi một kiến trúc chuyển tiếp được điều khiển rõ ràng.
7. Thay thế hoặc viết lại hoàn toàn
Tùy chọn này phù hợp khi sản phẩm mục tiêu khác biệt rõ rệt, khi nền tảng không còn khả dụng hoặc khi các ranh giới cần thiết cho một quá trình chuyển đổi không tồn tại. Nó phải bao gồm một chiến lược dữ liệu, một khoảng thời gian cùng tồn tại, các tiêu chí cân bằng và một khả năng quay lại thực tế.
| Chiến lược | Giá trị nhanh | Rủi ro chuyển đổi | Xử lý nợ | Yêu cầu kiểm tra |
|---|---|---|---|---|
| Bảo quản và bảo đảm an toàn | Mạnh | Yếu | Yếu | Vừa phải |
| Người chuyển đổi nền tảng | Trung bình | Yếu đến trung bình | Yếu | Vừa phải |
| Đóng gói | Trung bình | Trung bình | Gián tiếp | Vừa phải |
| Tái cấu trúc | Tiến bộ | Yếu theo từng phần | Mạnh | Mạnh |
| Thay một viên gạch | Mạnh | Trung bình | Nhắm mục tiêu | Mạnh về giao diện |
| Người siết cổ | Tiến bộ | Trung bình | Mạnh mẽ | Mạnh |
| Viết lại | Muộn | Mạnh mẽ | Về lý thuyết là toàn bộ | Rất mạnh |
Sơ đồ được đọc từ trái sang phải: mức độ thay đổi và rủi ro chuyển đổi tăng dần. Giữ nguyên và bảo vệ hạn chế thay đổi; tái nền tảng hiện đại hóa hạ tầng; đóng gói tạo ra một ranh giới; tái cấu trúc cải thiện mã nguồn theo từng bước; thay thế một viên gạch nhắm vào khả năng; mô hình strangler giảm dần phạm vi lịch sử; thay thế hoặc viết lại tập trung vào sự chuyển đổi và rủi ro. Bảng trước đó cung cấp một biểu diễn văn bản tương đương.
Tính toán chi phí toàn bộ của quá trình chuyển đổi
Chỉ so sánh chi phí phát triển làm sai lệch quyết định. Một quá trình hiện đại hóa cũng bao gồm việc hiểu biết về hệ thống hiện tại, bảo trì kép, di chuyển dữ liệu, kiểm thử, đào tạo, giám sát và giai đoạn tồn tại song song.
Chi phí của một chiến lược có thể được trình bày như sau:
tổng chi phí = chuyển đổi + duy trì hiện trạng + chuyển dữ liệu + điều chỉnh tích hợp + quản lý thay đổi + rủi ro còn lại.
Rủi ro phải được chuyển thành các kịch bản: trì hoãn, mất dữ liệu, gián đoạn, suy giảm tuân thủ quy định hoặc giảm năng suất. Không cần giả vờ đạt được độ chính xác nhân tạo; các phạm vi được ghi chép là đủ để so sánh các lựa chọn.
Một lộ trình theo bốn chân trời
Chân trời 1 — Làm cho hệ thống an toàn
Sửa chữa quyền truy cập, sao lưu, các phụ thuộc quan trọng, cảnh báo và quy trình. Giai đoạn này tạo ra một nền tảng ổn định và có thể được triển khai trước khi quyết định kiến trúc cuối cùng được đưa ra.
Chân trời 2 — Làm cho sự thay đổi có thể đo lường được
Thêm các bài kiểm tra đặc tính, các chỉ số và một bản đồ luồng. Xác định các mục tiêu hiệu suất và các tiêu chí thành công kinh doanh. Nếu thiếu những yếu tố này, các nhóm sẽ không thể chứng minh rằng việc hiện đại hóa thực sự cải thiện tình hình.
Chân trời 3 — Tạo ra các biên giới
Cô lập một mô-đun, giới thiệu một API, một hàng đợi sự kiện hoặc một lớp thích ứng. Ranh giới phải tương ứng với các khả năng kinh doanh, không chỉ với các bảng hay thư mục kỹ thuật.
Horizon 4 — Thay thế bằng giá trị
Xử lý trước các mô-đun kết hợp giá trị cao, rủi ro cao và khả năng cô lập. Mỗi lần thay thế phải giảm phạm vi cũ, không thêm một lớp phức tạp vĩnh viễn.
Điều khiển sự tồn tại chung
Trong suốt nhiều tháng, hai kiến trúc có thể cùng tồn tại. Cần xác định nguồn nào là đáng tin cậy, dữ liệu được đồng bộ như thế nào, cách chẩn đoán sự cố và ai quyết định việc khôi phục. Các cơ chế tạm thời phải có người chịu trách nhiệm và ngày rút lui.
Bảng điều khiển hiện đại hóa theo dõi ít về khối lượng mã mới hơn là về việc giảm rủi ro: số lượng lộ trình được bảo vệ, các phụ thuộc không được hỗ trợ bị loại bỏ, các thao tác thủ công bị xóa, thời gian giao hàng, sự cố và tỷ lệ lưu lượng đã chuyển sang các mô-đun mới.
Bảo tồn kiến thức chuyên môn
Người dùng có kinh nghiệm, bộ phận hỗ trợ và dữ liệu lịch sử là những nguồn quan trọng. Các trường hợp giới hạn cần được ghi lại dưới dạng ví dụ, quy tắc và bài kiểm tra. Việc trình diễn thường xuyên các quá trình cũ và mới giúp tránh việc phát hiện quá muộn rằng một ngoại lệ quan trọng đã biến mất.
Việc hiện đại hóa cũng là cơ hội để loại bỏ những chức năng đã trở nên không cần thiết. Sao chép lại mọi màn hình và mọi trường mà không thắc mắc về giá trị của chúng đồng nghĩa với việc mang theo khoản nợ chức năng vào một kiến trúc mới.
Chọn một quỹ đạo tương xứng
Chiến lược tốt hiếm khi chỉ có duy nhất cho toàn bộ ứng dụng. Một chương trình có thể bảo vệ phần lõi, thay thế việc tìm kiếm, tái cấu trúc tính toán nghiệp vụ và xây dựng lại giao diện. Điều quan trọng là chấp nhận kiến trúc chuyển tiếp này và đơn giản hóa nó ở mỗi bước.
Partitech đồng hành cùng các nền tảng quan trọng trong thời gian dài, từ kiểm toán đến tiếp quản, nâng cấp phiên bản và phát triển các module mới. Mục tiêu của chúng tôi là bảo vệ giá trị đã tích lũy trong khi khôi phục khả năng phát triển có thể dự đoán được.
Để bố cục quỹ đạo này, hãy bắt đầu bằng mộtkiểm toán kỹ thuật đầy đủ của ứng dụng, sau đó đi sâu vào các vấn đề củanợ kỹ thuậtvà so sánh mộttái cấu trúc big bang hay từng bước. Hãy tham khảo thêm các dịch vụ của chúng tôi vềcập nhật Symfony và của cập nhật Drupal, cũng như của chúng tôi chuyên môn WordPress.
Tài liệu tham khảo chính thức
Tham khảo đã được kiểm tra vào 17 tháng 8 năm 2026: