2011-11-03 38 views
8

Tôi vừa nhận được một công việc trở lại trong công ty Mỹ, và tôi đã thừa kế một loạt khó chịu của php 4 tập tin phẳng. Tôi muốn chuyển sang Symfony 2, nhưng không có cách nào tôi sẽ được phép tái xác định toàn bộ vấn đề.Di chuyển từ mã Spaghetti sang Symfony 2

Có ai có bất kỳ đề xuất nào về việc di chuyển các phần hoặc phần nhỏ của dự án sang Symfony 2 không? Có lẽ tôi có thể có một thư mục với toàn bộ cơ sở mã cũ và bắt đầu bằng cách chỉ sử dụng định tuyến trong Symfony 2 để lấy các tệp phẳng cũ?

Nếu có bất kỳ đề xuất nào tôi muốn nghe chúng.

+0

Áp dụng [quy tắc boyscout] (http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule)? Sau đó, một lần nữa, nếu bạn không được phép để refactor toàn bộ điều, tại sao bạn? –

+0

Tôi là một trinh sát đại bàng bản thân mình :-) Tôi nghĩ rằng các vấn đề đang làm chậm phát triển tính năng. Rõ ràng về lâu dài, tính năng phát triển trên cơ sở mã spaghetti trở nên chậm hơn và chậm hơn, nhưng bạn biết các loại quản lý này. Họ không thấy bất kỳ sự khác biệt nào về front-end, vậy tại sao lại dành thời gian cho cơ sở hạ tầng? ;-) – Clint

+0

Nếu bạn thực sự quan tâm, hãy phát triển lại trang web ở bên cạnh trong thời gian rảnh và sau đó chỉ trình bày nó một ngày. – DampeS8N

Trả lời

3

Trước hết, bạn đã hỏi liệu họ có cho phép bạn cấu trúc lại ứng dụng không? Bạn có thể xây dựng một trường hợp kinh doanh dựa trên:

  • Khả năng duy trì phần mềm đi về phía trước với chi phí thấp
  • Nó sẽ được dễ dàng hơn để giới thiệu các nhà phát triển khác để dự án
  • Nó sẽ được dễ dàng hơn để thêm các tính năng mới

Một yếu tố đầy đủ có thể không phức tạp hoặc tốn thời gian như bạn hình dung, và nó có thể được thực hiện song song trong khi vẫn duy trì ứng dụng cũ.

Bây giờ, làm những gì bạn đề xuất phức tạp hơn một chút. Bạn phải xem xét những điều sau:

  • Có thể sử dụng ORM trên cấu trúc cơ sở dữ liệu hiện có phụ thuộc vào cấu trúc của thiết kế.
  • Rất nhiều mã php4 sẽ không hoạt động trên php5 và bạn có thể sẽ thay đổi một số lượng đáng kể mã, giới thiệu lỗi, v.v.
  • Một số mã tùy chỉnh sẽ được yêu cầu để tích hợp phiên trên cả hai cơ sở mã .

Nếu các điểm trên không phải là vấn đề, bạn có thể loại bỏ cấu trúc php4 vào thư mục web để chúng có thể được truy cập trực tiếp và bắt đầu thay thế từng tuyến một khi bạn xây dựng từng màn hình Symfony.

Những đề xuất này rất theo ngữ cảnh. Nó thực sự phụ thuộc vào mức độ phức tạp của ứng dụng của bạn, và nó thực sự lộn xộn như thế nào.

Chúc may mắn tho!

+0

Tôi chỉ đề cập rằng việc đưa ứng dụng vào một khung công tác sẽ là một ý tưởng hay và ông chủ của tôi có vẻ hơi lưỡng lự. Nhưng bạn nói đúng, tôi nên đưa ra một đề xuất chính thức. Theo như PHP 5, tôi đã cập nhật ứng dụng để nó hoạt động trên php 5.3 ngay bây giờ. Ơn Chúa. Về phía ORM, tôi sẽ thực sự đang thực hiện các thực thể tùy chỉnh của riêng mình, vì cơ sở dữ liệu sẽ được truy cập từ một dịch vụ web chứ không phải trực tiếp. Vấn đề phiên là một mối quan tâm rất thực tế. Cảm ơn bạn cho người đứng đầu lên. Việc đặt các tệp phẳng trong thư mục web để bắt đầu là một ý tưởng tuyệt vời. – Clint

+0

Chỉ cần thử nghiệm phương pháp được đề xuất của bạn và có vẻ như hoạt động tốt. Có một số trục trặc, nhưng đối với hầu hết các phần, nó sẽ hoạt động và cho phép tôi thêm Gói cho từng tính năng chính trong suốt thời gian. – Clint

+0

tuyệt vời! hy vọng bạn tìm được giải pháp khả thi. Sẽ mất một thời gian để tái cấu trúc như một nền văn hóa cho công ty của bạn, nhưng khi bạn có thêm niềm tin với tư cách là một nhà phát triển [phụ trách], bạn hy vọng sẽ có thêm sự linh hoạt để đưa ra quyết định đó. Trừ khi sếp của bạn rất am hiểu công nghệ, đôi khi tốt nhất là bỏ qua các chi tiết về những gì bạn đang làm và giữ cho nó ở mức rất cao. Nếu họ tin tưởng sự phán xét của bạn thì sẽ dễ dàng hơn để tiến lên phía trước với những thay đổi lớn hơn. Đôi khi chúng mất ít thời gian hơn bạn nghĩ. – SuitedSloth

2

Trước hết, đặt bộ điều khiển phía trước tùy chỉnh được thực hiện làm giao diện người dùng cho các tệp phẳng đó.

Bạn có thể chuyển hướng url cũ đến bộ điều khiển trước mới bằng mod_rewrite.

RewriteRule ^/?(.*) /index.php/$0 
# this shall work in .htaccess (/paths) and in httpd.conf (non slashed local paths) 

Paths sau đó có thể được lấy ra trong index.php máng $_SERVER['PATH_INFO']

Từ bộ điều khiển phía trước bạn có thể xử lý một số chuyển hướng dần hạt mịn đến bất kỳ giải pháp đóng hộp bạn muốn chuyển đến. Đối với các URL mà bạn muốn giữ lại chức năng cũ, một số include("./".$_SERVER['PATH_INFO']) sẽ thực hiện thủ thuật.

1

Lời khuyên của tôi là chia nhỏ thành các bước. Thường thì việc quản lý sẽ chấp nhận một loạt chi phí nhỏ dễ dàng hơn nhiều so với chi phí lớn một lần.Tôi muốn tập trung vào việc làm sạch mã và sẵn sàng cho PHP5 trước khi chuyển sang Symfony2.

Khi mã được làm sạch, tích hợp Symfony2 vào dự án của bạn sẽ khá dễ dàng.

+0

Cảm ơn thông tin chi tiết của bạn Steve. Tôi biết bạn là người symfony. – Clint

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