Phần 1: Đặt vấn đề - Tại sao cần nâng cấp?

Trong thế giới công nghệ, việc duy trì một hệ thống cũ là chấp nhận một nguy cơ tiềm tàng. Và hôm nay, mình sẽ giới thiệu đến các bạn hành trình mình upgrade CakePHP 3.5 cũ kỹ, trao cơ hội cho CakePHP 4.x được tỏa sáng.

Những lý do chính:

  1. Cải thiện bảo mật: PHP 7.2 đã hết hỗ trợ, trong khi PHP 8.x mang lại các tính năng mới tối ưu hóa an toàn.
  2. Hiệu năng tốt hơn: CakePHP 4.5 được tối ưu để giảm thời gian load và tăng tính phản hồi.
  3. Hỗ trợ dài hơn: CakePHP 4.x sẽ tiếp tục nhận được các bản cập nhật và sửa lỗi từ các nhà phát triển trong nhiều năm tới.
  4. Cải thiện trải nghiệm người dùng: Hiện đại hóa các giao diện và tính năng linh hoạt, mềm mỏng.

Phần 2: Chiến lược chuẩn bị – Chậm mà chắc

Nâng cấp framework giống như xây dựng lại một ngôi nhà. Nếu không lên kế hoạch chi tiết, rất dễ gây ảnh hưởng đến hoạt động của cả hệ thống.

1. Quá trình phân tích & chuẩn bị

Khảo sát và đánh giá source code:

  • Rà soát tài liệu, codebase hiện có.
  • Liệt kê các dependencies.
  • Xác định breaking changes.

Lên lộ trình chi tiết:

  • Tạo timeline chi tiết theo từng giai đoạn.
  • Phân bố nguồn lực và xác định task có thể gắn từng thành viên trong team dự vào kinh nghiệm của họ.

2. Bổ sung Unit Test:

  • Liệt kê, đánh giá toàn bộ files cần test
  • Chạy code Coverage
  • Bổ sung, viết mới unit test còn thiếu
  • Đáp ứng cover đầy đủ method
  • Phủ sóng test đạt trên 80%

Công cụ hỗ trợ viết Unit Test

  1. PHPUnit
  2. phpunit/php-code-coverage
  3. Xdebug
  4. Mockery - Mock Objects
  5. AI: Github Copilot, Claude.ai, ChatGPT...

Phần 3: Quá trình nâng cấp

Chiến lược upgrade

Chiến lượt upgrade tùy thuộc vào tình hình dự án: số lượng member, thời gian release,... mà bạn có thể quyết định upgrade từng bước hoặc nhảy vọt. Như trên mình đang chọn hình thức nhảy vọt vì  thời gian không cho phép đi từng bước.

a. Hãy update composer & dependency theo từng bước từ CakePHP 3.5 lên  CakePHP 3.10

  • Upgrade composer CakePHP 3.5 to CakePHP 3.6
  • Upgrade composer CakePHP 3.6 to CakePHP 3.7
  • Upgrade composer CakePHP 3.7 to CakePHP 3.8
  • Upgrade composer CakePHP 3.8 to CakePHP 3.9
  • Upgrade composer CakePHP 3.9 to CakePHP 3.10

b. Tiếp đến, Cập nhật trước khi nâng cấp lên CakePHP 4.0:

  • Update struct code để phù hợp với CakePHP 4.0.
  • Update rector PHPUnit 8.0 và CakePHP4.0 để phù hợp với version mới.

c. Cập nhật composer & dependency lên CakePHP 4.2

  • Step1: Upgrade PHP 7.2 to PHP 8.0
  • Step2: Upgrade composer CakePHP 3.10 đến CakePHP 4.0
  • Step3: Upgrade composer CakePHP 4.0 to CakePHP 4.1
  • Step4: Upgrade composer CakePHP 4.1 to CakePHP 4.2

d. Cập nhật tất cả các deprecated methods & Behavior Changes

  • Các việc cần được thực hiện theo từng phiên bản để đảm bảo tính tương thích ngược và giảm thiểu lỗi.
  • Bạn nên tạo một danh sách kiểm tra (checklist) và kiểm tra kỹ tài liệu chính thức của CakePHP cho từng thay đổi cụ thể.

e. Cuối cùng trong step upgrade, hãy test lại những gì đã làm.

  • Hãy vận dụng tất cả các kỹ thuật test  như Unit Test, Integration Test, Manual test... để đảm bảo những thay đổi của bạn vẫn hoạt động tốt.

Phần 4: Khó khăn và cách vượt qua

“Mọi chuyến phiêu lưu đều có những chông gai, nhưng đó là một phần của hành trình” – điều này chắc chắn đúng khi nói đến nâng cấp framework.

1. Những khó khăn mình gặp phải:

  • Nhân lực: Chỉ có 1 người implement và 1 người review.
  • Xung đột cú pháp: Nhiều hàm đã bị deprecated.
  • Thời gian debugging lâu: Việc tìm và sửa lỗi chiếm rất nhiều thời gian.
  • Công cụ: công cụ hỗ trợ upgrade còn nhiều hạn chế, chưa thể tự động hóa quá trình upgrade

2. Giải pháp:

  1. Lên kế hoạch chi tiết.
  2. Tự động hóa việc test.
  3. Tìm plugin thay thế hoặc tự nâng cấp plugin hiện có.
  4. Debugging bằng các công cụ như phpstan, CakePHP Document.

Phần 5: Kết quả và thành tựu

Sau tất cả nỗ lực nâng cấp lên CakePHP 4.x đã hoàn thành, mang lại những thay đổi to lớn cho người dùng:

  • Hiệu năng vượt trội.
  • Bảo mật tăng cao.
  • Hỗ trợ tính năng mới của PHP 8.x.

Phần 6: Kết luận – Bài học rút ra

Cuối cùng, chuyện nâng cấp không chỉ là về việc chuyển từ phiên bản này sang phiên bản khác. Đó là một hành trình học hỏi và nâng cao kinh nghiệm.

Những điều cần ghi nhớ:

  1. Lập kế hoạch cập nhật rõ ràng.
  2. Testing cẩn thận, đầy đủ.
  3. Tạo checklist chi tiết cho từng step.
  4. Dùng công cụ hỗ trợ như, CakePHP upgrade, PHPUnit, phpstan, AI: GitHub Copilot, Clause...