2008-09-19 31 views
5

Gần đây tôi đã tham gia vào một dự án mà trò chơi dựa trên web sử dụng một công cụ được viết bằng PHP. Trò chơi hoạt động tốt nhưng có thể mạnh mẽ hơn và có một số tính năng hơn - và mã này vừa cũ vừa khá xấu.Làm cách nào để bạn cấu trúc lại mã PHP cũ của mình?

Vấn đề với mã này (và nhiều mã PHP nói chung tôi nghi ngờ) là nó đã phát triển đến vị trí của nó và không được cấu trúc rất độc đáo, có rất nhiều mã được cắt/dán gần như giống hệt nhau, và sử dụng nhiều globals ngay cả khi các chức năng liên quan. Không phải là một bài kiểm tra đơn vị ở bất kỳ đâu, tất nhiên, và mã được mã hóa cứng để sử dụng một DB cụ thể và dựa vào các chuỗi $ _REQUEST từ trang web gọi mã.

Điều đúng đắn cần làm là kéo các phần của mã thành các chức năng phụ, dọn dẹp chúng và thêm một số kiểm tra đơn vị để đảm bảo nó tiếp tục hoạt động, thêm một vài đối tượng giả trên đường đi. Tuy nhiên, làm điều này hoàn toàn bằng tay là tẻ nhạt và dễ bị lỗi và tôi tự hỏi làm thế nào bạn làm điều này - là có một IDE hoặc công cụ có thể giúp đỡ, ví dụ? Tôi muốn có một công cụ có thể giúp tạo ra một hàm từ một đoạn mã được xác định, đề xuất biến nào là tham số, theo giá trị hoặc tham chiếu, tự động thêm $ this-> references, v.v.

Đây có phải là quá nhiều hỏi, hoặc là có một giải pháp tốt?

Cảm ơn!

Trả lời

11

Allan, tôi chưa bao giờ thấy công cụ tái cấu trúc mạnh mẽ. Ngay cả việc tái cấu trúc Eclipse cho Java không phải là tính năng hoàn chỉnh. Tuy nhiên, có một số gợi ý phổ biến về tái cấu trúc. Tôi thường ứng dụng refactor trong hai bước.

1. Tách mọi thứ. Tôi trích xuất db và các công cụ liên quan đến mô hình và trích xuất chúng ra khỏi mã chính. Một số đại diện đối tượng sẽ giúp đỡ. Kiểm tra Active Record hoặc DAO mẫu cho bất kỳ công việc nào ORM. Mã HTML có thể được lấy ra khỏi mã chính và chuyển đến tệp mẫu. Kiểm tra công cụ mẫu đẹp với hỗ trợ mạnh mẽ để xử lý chế độ xem logic - Smarty.

2. Đặt mọi thứ vào khung MVC.MVC là một kiến ​​trúc mạnh mẽ phù hợp với các ứng dụng web đặc biệt tốt. Sử dụng một trong các khung công tác PHP để buộc các tệp PHP bị lỏng lẻo vào các phương thức điều khiển. Khung làm cho việc quản lý URL dễ dàng, yêu cầu HTTP, truyền tham số, quản lý thông tin đăng nhập và thường cung cấp một số cơ chế kiểm soát truy cập.

Nhưng điều quan trọng nhất là: không phá vỡ những thứ ngoài sửa chữa. Đó là tái cấu trúc, không tái phát triển ;-)

0

Tôi cảm thấy đau đớn của bạn. Tuy nhiên, tôi chưa bao giờ nghe nói về một công cụ như vậy, ít nhất là không cho PHP.

0

Tôi không nghĩ rằng ngôn ngữ thậm chí còn được cấu trúc đủ để cho phép bất kỳ loại tái cấu trúc bán tự động nào. Dù sao tôi không biết bất kỳ ứng dụng nào có thể làm điều này, nhưng về mặt tươi sáng - làm tất cả bằng tay sẽ làm cho bạn quen thuộc với nguồn gốc, nó có thể giúp bạn sau đó bạn biết cách của bạn tốt hơn rất nhiều so với bạn với các công cụ tự động.

9

Bài viết này thực sự nhấn mạnh sự nguy hiểm của refactoring/redeveloping mã xấu xí cũ:

http://www.1729.com/blog/EconomicsOfTestingUglyCode.html

Tiếp cận của tôi nói chung là để giải quyết một vấn đề nhỏ tại một thời điểm, mà bắt đầu với ẩn nhiều mã cũ đằng sau một giao diện mà nó có thể được xử lý với "sau này" mà không ảnh hưởng đến bất kỳ mã mới nào.Bằng cách này, mọi thứ mà tôi viết có thể được thiết kế tốt và có cấu trúc vững chắc, nhưng tôi không phải lãng phí quá nhiều thời gian cố gắng tái cấu trúc và sau đó kiểm tra mã số của tuần/tháng/năm.

+0

Liên kết bị hỏng và dường như không còn trên mạng nữa. – Kzqai

+0

[Bài viết này] (http://thinkinghard.com/blog/EconomicsOfTestingUglyCode.html) có cùng tiêu đề và được viết vào năm 2008 phù hợp với ngày trả lời của @ David. –

1

Không có công cụ nào sẽ lấy mã fugly và bằng cách nào đó làm cho nó trở lại tốt đẹp. Cụm từ "back-to-formula" khá là một viễn cảnh đáng sợ đối với một dự án trưởng thành, nhưng trần với tôi ...

Tôi khuyên bạn nên chuyển nó sang một khung MVC phong nha. Khi làm như vậy, nó có thể không phải là một thời gian xấu để làm một cấu trúc viết lại vì vậy tất cả các lớp học của bạn được tối ưu hóa (một cái gì đó hiếm khi xảy ra tự nhiên với mã phát triển). Nó sẽ mất một thời gian dài và sẽ có đau khi mọi thứ không hoạt động như mong đợi.

Đó là một bước tiến lớn nhưng đó là những gì sẽ xảy ra khi mã bị hủy.

tùy chọn khác của bạn:

  1. Thực hiện tái cấu trúc một phần, nơi tất cả các mã mới sau một chế độ thiết lập và mã cũ đang dần xây dựng lại.
  2. Chỉ sửa lỗi của bạn và không thực hiện tái cơ cấu.
-1

Theo kinh nghiệm của tôi, viết lại hoàn chỉnh sẽ tiết kiệm hơn nhiều trong tình huống này.

+0

Viết lại các phần là tốt, nhưng viết lại đầy đủ trên rất nhiều mã (như mọi người nói) chỉ phát hiện ra lỗi trường hợp cũ một lần nữa, để các trường hợp đặc biệt tương tự mà mã cũ bao gồm bong bóng trở lại một lần nữa. – Kzqai

Các vấn đề liên quan