Mẹo để lập kế hoạch viết lại một dự án PHP lớn?


13

Tôi đã quyết định viết lại hoàn toàn một khung công tác PHP (Sử dụng MVC) mà tôi đã làm việc trên và tắt trong nhiều năm. Vấn đề của tôi cho đến bây giờ là tôi sẽ nảy ra ý tưởng, ném chúng vào Trac dưới dạng vé và thêm chúng sau - mà không phải lo lắng về thiết kế của chính khung. Theo thời gian, điều này đã gây ra một số vấn đề và tôi nghĩ rằng việc viết lại sẽ hữu ích, tuy nhiên tôi không chắc bắt đầu từ đâu với kế hoạch của nó - Tôi biết tôi không muốn sử dụng Trac và tôi biết tôi cần nhiều hơn là vé và cột mốc - nhưng tôi cần gì nữa?

Tôi thực sự muốn lên kế hoạch kỹ lưỡng cho việc viết lại này, tôi muốn chi tiết mọi tính năng tôi muốn, nơi nó sẽ đi và cách nó sẽ kết nối với mọi phần khác - nhưng tôi không có kinh nghiệm với mức độ lập kế hoạch này. Có lời khuyên nào không? Bất kỳ chương trình sẽ giúp đỡ? Tôi cảm thấy mệt mỏi với Trac, tôi chưa bao giờ thực sự thích nó.

Tôi biết tôi sẽ cần một tài liệu thiết kế, nhưng tôi có nên theo bố cục nào không? Tôi cũng sẽ cần theo dõi lỗi, vé, cột mốc, v.v., nhưng ngoài Trac tôi cũng không biết điều gì tốt cho việc đó. Tôi chắc chắn rằng tôi sẽ cần nhiều hơn nhưng tôi không biết gì, vì vậy mọi sự giúp đỡ đều được đánh giá cao.


tại sao bạn muốn viết lại nó? Tại sao không tái cấu trúc nó ở những nơi cần cải thiện? Khi bạn viết lại một cái gì đó từ đầu, rất có thể bạn sẽ loại bỏ những vấn đề cũ cho những cái mới.

@Gordon có lẽ nó được viết cực kỳ khủng khiếp đến nỗi viết lại nó tốt hơn là tái cấu trúc.
đúng

Viết lại luôn khó hơn dường như và tôi đã học được nó một cách khó khăn. Ồ, lần này tôi biết tôi đang làm gì, nên sẽ mất một nửa thời gian (sau đó sẽ mất nhiều thời gian hơn ban đầu vì bạn quá cố gắng sửa chữa hoặc mắc lỗi trước đó)
Davy8

Câu trả lời:


7

Xem bên dưới một số điều tôi làm khi phát triển một dự án lớn:

1 - Tôi sử dụng một công cụ lập kế hoạch như OpenProj và thêm tất cả các tính năng tôi muốn đưa vào làm nhiệm vụ. Ví dụ: ngay bây giờ tôi đang làm việc trên một tính năng để cho phép người dùng của tôi tự động đăng nhập sau khi họ đăng ký trong trang web của tôi. Tôi có một nhiệm vụ trong kế hoạch của mình như "tính năng tự động".

2 - Tôi là một cửa hàng phát triển một người nên tôi thường chuyển từ tính năng này sang tính năng tiếp theo. Kế hoạch của tôi được tạo ra theo cách mà tất cả các tính năng là tuần tự. Tôi không đầu tư quá nhiều thời gian để ước tính tôi sẽ cần bao nhiêu thời gian cho mỗi tính năng. Tôi thường xem xét rằng mỗi người sẽ đưa tôi một ngày để phát triển. Nếu một người mất nhiều hơn, tôi chỉ cần cập nhật kế hoạch và tất cả các nhiệm vụ trong tương lai sẽ di chuyển theo.

3 - Tôi sử dụng git rộng rãi. Mỗi tính năng là một nhánh. Khi tôi hoàn thành mỗi tính năng, tôi hợp nhất nó trở lại nhánh phát triển và tạo một nhánh mới cho tính năng tiếp theo.

4 - Nếu tôi tìm thấy một lỗi trong phần mềm, tôi tạo một nhánh git nhỏ để sửa nó và hợp nhất lại sau khi nó được giải quyết. Tôi chắc chắn rằng tôi cập nhật cả nhánh phát triển và nhánh tính năng hiện tại mà tôi đang làm việc. Nhân tiện, lỗi trở thành một nhiệm vụ khác trong kế hoạch OpenProj của tôi. Một cái gì đó như "lỗi-địa chỉ sai". Và khi tôi chèn nó, tất cả các tính năng khác sẽ được chuyển trở lại trong dòng thời gian.

5 - Trong khi tôi đang phát triển, nếu tôi nghĩ về một tính năng mới, tôi chỉ cần đưa nó vào kế hoạch mà tôi nghĩ nó sẽ phù hợp nhất và điều chỉnh lại dòng thời gian.

Tôi hi vọng cái này giúp được. Có vẻ như bạn có một dự án thú vị trước mắt. Chúc may mắn!


10

Nếu bạn đang viết lại hoàn chỉnh, tại sao không xem xét liệu bạn có nên sử dụng php không? Thay đổi / nâng cấp công nghệ có thể là chất xúc tác bạn muốn cải thiện thiết kế / khả năng mở rộng / khả năng bảo trì của mình, v.v ...


3
Ngoài ra, hãy xem xét các khung hiện có có thể phù hợp hơn so với việc tạo Khung sử dụng một lần khác.
S.Lott

1
@ S.Lott - có gì sai khi tạo Khung sử dụng một lần nếu nó được điều chỉnh để phục vụ cho việc sử dụng một lần đó tốt hơn bất kỳ mục đích nào khác?
Ẩn danh

1
@Chris Bridgett: Thế giới có thể không cần một khuôn khổ chuyên môn cao khác. Nó có thể là một "phiền toái hấp dẫn". Một sự lãng phí thời gian vui vẻ. Thông thường, các khung hiện có cũng làm công việc này. Việc "may đo" trong một khung mục đích đặc biệt thường bắt nguồn từ việc không hiểu được một khung hiện có, đã được thiết lập. Thông thường, các khung hiện có là an toàn hơn, đáng tin cậy hơn và nhanh hơn. Thông thường, các khung hiện có đã được gỡ lỗi. Thông thường, các khung hiện có được hiểu rõ hơn bởi các thành viên khác trong nhóm.
S.Lott

@ S.Lott: Tôi đang viết bài này cho một số trang web mà tôi sở hữu và thiết kế của nó được thiết lập theo cách không có khung nào khác. Tôi cũng không có kế hoạch phát hành nó trong một thời gian, nếu có bao giờ. re: TheLQ: Đó là một trong những suy nghĩ đầu tiên của tôi, tuy nhiên không có ngôn ngữ web nào khác có khả năng mà PHP làm được ngoài .NET. Python sẽ được ưu tiên, tuy nhiên việc cài đặt nó trên các máy chủ cPanel (điều đáng buồn là trang điểm rất nhiều trong thế giới lưu trữ web), là một điều khó khăn.
Jon

1
@ S.Lott Tôi đã đọc về Symfony, CakePHP và CodeIgniter kể từ khi đăng bài, và điều số một khiến tôi không sử dụng những thứ này - là tất cả dường như mù quáng dính vào MVC và bỏ qua khả năng sử dụng lại. Thiết kế hiện tại của tôi (Và tương lai, nếu tôi viết lại) là MVC trong một thư mục duy nhất (thư mục 'mô-đun'), với các chế độ xem trong đó người dùng muốn (Named example.module.view.php), cũng như một chủ đề thư mục, nơi các nhà thiết kế có thể tạo chủ đề của riêng họ ghi đè lên các chế độ xem hiện có. Điều này rất quan trọng đối với tôi và không có khuôn khổ chính nào thực hiện điều này mà không có nhiều hack - điều đó làm phiền tôi.
Jon

10

Tôi sẽ đề nghị tái cấu trúc mạnh thay

Vấn đề bạn dự đoán ở đây:

Tôi thực sự muốn lên kế hoạch kỹ lưỡng cho việc viết lại này, tôi muốn chi tiết mọi tính năng tôi muốn, nơi nó sẽ đi và cách nó sẽ kết nối với mọi phần khác - nhưng tôi không có kinh nghiệm với mức độ lập kế hoạch này. Có lời khuyên nào không? Bất kỳ chương trình sẽ giúp đỡ? Tôi cảm thấy mệt mỏi với Trac, tôi chưa bao giờ thực sự thích nó.

là một khó khăn thực sự. Nó về cơ bản là mô hình Thác nước với tất cả sự xấu xí của nó. Đây là một số bằng chứng giai thoại cho các vấn đề với phương pháp 'viết lại tuyệt vời', đi đến kết luận: bạn có thể sẽ không lường trước được các vấn đề một cách chính xác, và kết thúc với một mớ hỗn độn khác mà bạn muốn viết lại từ đầu. Không phải vì bạn xấu, mà bởi vì không thể có được thứ gì đó to lớn ngay trong một lần bắn.

Thay vào đó, khi bạn bắt đầu tái cấu trúc, bạn có thể viết vé riêng lẻ và bạn có thể tiếp tục sử dụng dự án. Mẹo ở đây là xác định những thay đổi nhỏ hơn dẫn đến một thiết kế tổng thể tốt hơn.

Ví dụ: bạn đề cập, bạn không có MVC, nhưng bạn muốn. Bước đầu tiên, bạn có thể lấy một tệp PHP và giả sử hỗn hợp thông thường, sắp xếp nó, để ở trên cùng bạn có tất cả quyền truy cập db, tính toán, v.v., ở phía dưới bạn có "templating" (ở dưới cùng bạn có "templating" ( vé đầu tiên, cho mỗi tập tin). Bước thứ hai, bạn có thể gói gọn tất cả các phần tạo khuôn mẫu này thành các hàm, để các tham số của chúng được thông qua. (rất nhiều vé hơn). Làm xong? Xin chúc mừng, bạn đã hoàn thành V của mình trong MVC.


Tôi sẽ tính đến điều đó, cảm ơn. Ngoài ra chỉ để làm rõ mọi thứ - Tôi đang sử dụng MVC ngay bây giờ.
Jon

@Jon: Vâng, ví dụ của tôi giả sử một trang điển hình, không có khung. Nhưng tôi nghĩ, với những sửa đổi thích hợp, câu trả lời của tôi không bị vô hiệu bởi điều đó. Một điểm tôi đã không đề cập: tái cấu trúc là niềm vui. Thật là bổ ích khi thấy toàn bộ crap trở thành một thứ gì đó đẹp đẽ :)
keppla

3

Xem xét sử dụng một khung hiện có. CakePHP, Zend Framework, CodeIgniter và Symfony là những cái đã biết cho PHP. Nếu họ phục vụ nhu cầu của hàng trăm hoặc hàng ngàn người dùng, tôi chắc chắn họ có thể phục vụ nhu cầu của bạn.

Nếu bạn sẵn sàng học / sử dụng thứ gì đó không phải là PHP - Django (Python) và Rails (Ruby) thì hầu như là các khung hàng đầu cho các ứng dụng web thông thường.

Tất nhiên, đó là trừ khi bạn muốn có kinh nghiệm tạo khung - mà tôi có thể thêm vào, có giá trị thấp hơn nhiều trên thị trường (thay vì biết cách sử dụng tốt các khung được hỗ trợ hiện có).


1

Những gì tôi thích sử dụng là Redmine như một trình theo dõi lịch trình. CNTT xử lý từng mục đó rất tốt, cùng với việc thân thiện với người dùng hơn (theo ý kiến ​​của tôi) so với trac.

Về việc viết lại của bạn, điều quan trọng trước tiên là bạn sẽ không bao giờ lường trước được mọi tính năng / tiện ích mở rộng mới có thể xuất hiện, vì vậy hãy thử và viết ứng dụng của bạn linh hoạt nhất có thể. Sử dụng nhiều khung công tác MVC mà PHP có thể giúp tận dụng điều này; tuy nhiên, một số khung công tác này cũng tạo ra lỗ hổng cho bạn nếu kiến ​​trúc DB của bạn không linh hoạt ngay từ đầu (Bánh). Tôi thực sự sẽ tập trung vào việc làm cho mọi thứ trở nên trừu tượng nhất có thể, và bất cứ khi nào bạn thấy một thứ gì đó được mã hóa cứng, hãy tự hỏi nó để làm gì và tại sao nó không thể được lưu trữ trong DB.

Thiết kế DB thực sự giúp trả lời rất nhiều câu hỏi và vấn đề, và là nơi tôi thấy tầm quan trọng chính của cách ứng dụng của bạn tương tác; vì vậy tôi khuyên bạn nên dành phần lớn thời gian để phân tích cách lưu trữ dữ liệu và cách cấu trúc DB của bạn.


1

Là một phần mềm theo dõi vấn đề, JIRA rất tuyệt, nhưng nó rất đắt. Một công cụ tốt khác mà tôi đang sử dụng là Eventum. Nó miễn phí.

Nhưng phần quan trọng nhất là có một ý tưởng tốt về những gì bạn cần. Trước tiên, bạn phải thu thập các yêu cầu cho ứng dụng của mình, để có cảm nhận tổng thể về những gì bạn muốn và hoàn thành nhất có thể.

Dựa vào đó bạn sẽ tạo ra các yêu cầu phần mềm, đó là một cách tiếp cận kỹ thuật hơn, trong đó bạn sẽ mô tả các mô-đun sẽ là một phần của ứng dụng của bạn, chức năng và chức năng phụ, đối tượng, lớp, giao diện của chúng, về mọi thứ.

Vì biết rằng bạn sẽ hiểu rõ về sự phức tạp của ứng dụng và các dòng mã cần thiết, vì vậy bạn có thể ước tính và tạo lịch biểu. Điều quan trọng là phải có lịch trình và thời hạn, nếu không bạn có thể sẽ không bao giờ hoàn thành nó.

Hy vọng nó giúp


Jira rất rẻ cho ít hơn 10 người dùng. Chi phí là $ 10 và $ 10 dành cho từ thiện.
Sixty feetersdude 18/03/13
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.