2012-01-31 43 views
7

Hiện tại tôi chỉ có một nhóm tệp php nằm trong các thư mục trong điều khiển nguồn. Về mặt logic Tôi có một tập hợp các dự án liên quan và một cơ sở dữ liệu được chia sẻ.Tổ chức dự án PHP

  • Dự án 1 là ứng dụng web tương tác với cơ sở dữ liệu.
  • Dự án 2 là một số quy trình nền cũng tương tác với cùng một cơ sở dữ liệu.
  • Dự án 3 là thư viện bao gồm các đối tượng kết nối cơ sở dữ liệu mở rộng và các chức năng tiện ích khác.

Dự án 1 và 2 phụ thuộc vào mã thư viện.

Tôi muốn chia các dự án thành ba kho riêng biệt để chúng có thể được phát triển độc lập.

Cách tiếp cận tốt nhất để tổ chức hai dự án đầu tiên để chúng phụ thuộc vào thư viện nhưng không cần bản sao thư viện của riêng chúng trong cây nguồn của chúng là gì?

Tôi có nên chuyển đổi thư viện thành gói PEAR và có gói hệ thống được cài đặt rộng không. Hoặc tốt hơn là các dự án 1 và 2 là 'xây dựng/triển khai' theo một nghĩa nào đó và bao gồm một bản sao của thư viện trong bước xây dựng đó. Cách tiếp cận này có nghĩa là sử dụng một số công cụ quản lý xây dựng như Phing/PHP-Maven.

+1

Bạn đang sử dụng phần mềm scm nào? Điều gì về các liên kết tượng trưng? – hakre

Trả lời

3

Giữ bản sao mã trong cây nguồn không phải là điều xấu. Nó cho phép bạn kiểm soát khi bạn đi qua các giai đoạn nâng cấp thay vì có hệ thống áp đặt nó trên ứng dụng của bạn. Đó là một tình huống khá xấu khi bạn cần phải giải phóng mã của bạn và thay đổi thư viện xảy ra ngay trước đây, buộc bạn phải thực hiện các thay đổi vào phút cuối trên phần mềm phải phát hành trực tiếp.

Nếu bạn đang sử dụng subversion, bạn có thể sử dụng externals để bao gồm mã thư viện vào ứng dụng của bạn và khóa nó tại một phiên bản nhất định. Cập nhật nó chỉ là về chỉnh sửa một thuộc tính để thay đổi số phiên bản và cập nhật mã.

Các công cụ kiểm soát phiên bản khác có thể cung cấp các chức năng tương tự. Một số dự án như Symfony2 cũng bao gồm một kịch bản để quản lý các phụ thuộc, tuy nhiên chúng chỉ hỗ trợ git.

+0

Đó là một điểm công bằng thực sự. Có lẽ là giải pháp tốt nhất hiện nay. Đối với những gì nó có giá trị tôi thực sự sử dụng Mercurial. Đi theo quan điểm về việc không muốn phải chịu bất kỳ phiên bản mới nhất của thư viện là gì. – freshnewpage

+0

Có một chủ đề về cách sử dụng mercurial cho việc này. Có vẻ như một phần mở rộng có sẵn. http://stackoverflow.com/questions/217523/can-i-emulate-svnexternals-using-mercurial –

1

Có lẽ vì tôi là người dùng maven, tôi muốn khai báo project3 là phụ thuộc của project1 và project2 và sử dụng maven làm công cụ quản lý xây dựng và trình phân giải phụ thuộc (trong số những thứ khác). Vấn đề phiên bản được chỉ ra bởi @ Louis-Philippe Huberdeau có thể tránh sử dụng các phiên bản và tuyên bố các phụ thuộc là phiên bản cụ thể: ví dụ, đối với các dự án phát triển có thể phụ thuộc vào project3-1.0-SNAPSHOT và việc giải phóng phụ thuộc sẽ trở thành project3-1.0-RELEASE . Bằng cách này, ba dự án có thể phát triển độc lập. Việc phiên bản và triển khai các tạo phẩm có thể được thực hiện bởi maven. Sau đó, nếu bạn cần, bạn có thể sử dụng máy chủ CI, như hudson hoặc Travis CI.

+0

Tôi chủ yếu đề cập đến việc trỏ đến vị trí cố định trên ổ cứng. Những người phản xạ thường gặp có trong PHP. –

+0

Có, tôi đang đối phó với phản xạ phổ biến trong C#: P Chúng tôi đang sử dụng svn externals trong một di sản C# nhưng tôi rất thích thay đổi điều đó. – Diego

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