Tôi làm việc trong một cửa hàng nhỏ, nơi chúng tôi có rất nhiều mã Cobol cũ và nơi một methology đã được thông qua để cho phép chúng tôi giảm thiểu forking và phân nhánh càng nhiều càng tốt.Một methology cho phép một mã Java đơn cơ sở bao gồm nhiều phiên bản khác nhau?
Đối với một thông cáo cho chúng tôi có ba cấp độ:
- CORE - lớp dưới cùng, mã này là chung cho tất cả các phiên
- GROUP - Mã bắt buộc chung cho một số khách hàng.
- KHÁCH HÀNG - mã tùy chọn dành riêng cho một khách hàng.
Khi chương trình là cần thiết, nó được tìm kiếm lần đầu tiên trong CUSTOMER, sau đó trong GROUP và cuối cùng là CORE. Một ứng dụng đã cho chúng ta gọi nhiều chương trình mà tất cả đều được tìm kiếm trong chuỗi này (nghĩ rằng các tệp exe và PATH trong Windows).
Chúng tôi cũng có các chương trình Java tương tác với mã di sản này, và khi nhóm khách hàng tìm kiếm cốt lõi không cho vay dễ dàng với Java, nó có xu hướng phát triển trong một chi nhánh CVS cho mỗi khách hàng, đòi hỏi quá nhiều duy trì. Phần Java và phần phụ trợ có xu hướng được phát triển song song.
Tôi đã được chỉ định để tìm ra cách để làm cho hai thế giới gặp nhau. Về cơ bản chúng tôi muốn một môi trường Java cho phép chúng tôi có một cơ sở mã duy nhất với các nguồn cho mỗi bản phát hành, nơi chúng tôi có thể dễ dàng chọn nhóm và khách hàng và làm việc với ứng dụng như nó đi cho khách hàng đó, và sau đó dễ dàng chuyển sang một bộ mã hóa khác và khách hàng R THNG đó. Tôi đã nghĩ về một kịch bản có lẽ với một dự án Eclipse cho mỗi lõi, khách hàng và nhóm và sau đó sử dụng Bộ dự án để chọn những dự án cần thiết cho một kịch bản nhất định. Vấn đề tôi không thể hiểu được, là cách chúng tôi tạo ra mã mạnh mẽ trong các dự án CORE sẽ hoạt động bất kể nhóm và khách hàng nào được chọn. Một lớp nhà máy mà biết lớp con của một đối tượng Class được truyền để gọi thay cho mỗi và mỗi mới?
Những người khác phải có các vấn đề về quản lý cơ sở mã tương tự. Bất kỳ ai có kinh nghiệm chia sẻ?
EDIT: Kết luận cho vấn đề này ở trên đã được rằng CVS cần phải được thay thế bằng một hệ thống quản lý mã nguồn phù hợp hơn để đối phó với nhiều chi nhánh kiêm nhiệm và sự di cư của nguồn từ một thành phần cho người khác trong khi vẫn giữ lịch sử. Lấy cảm hứng từ việc di chuyển gần đây bởi slf4j và logback, chúng tôi hiện đang xem xét git khi nó xử lý các nhánh rất tốt. Chúng tôi đã xem xét subversion và mercurial quá nhưng git xuất hiện để được tốt hơn cho vị trí duy nhất, các dự án multibranched. Tôi đã hỏi về Perforce trong một câu hỏi khác, nhưng khuynh hướng cá nhân của tôi hướng tới các giải pháp nguồn mở cho một cái gì đó quan trọng như thế này.
EDIT: Sau khi cân nhắc kỹ hơn, chúng tôi thấy rằng điểm đau thực tế của chúng tôi là sử dụng chi nhánh trong CVS và dễ dàng làm việc với chi nhánh! Kết luận được sửa đổi là chúng tôi có thể làm điều này với CVS một mình, bằng cách chuyển sang một khu rừng của các dự án java, mỗi dự án tương ứng với một trong các cấp trên và sử dụng các đường dẫn xây dựng Eclipse để gắn chúng lại với nhau để mỗi phiên bản CUSTOMER kéo vào dự án GROUP và CORE thích hợp. Chúng tôi vẫn muốn chuyển sang một hệ thống phiên bản tốt hơn nhưng đây là một quyết định rất quan trọng nên chúng tôi muốn trì hoãn nó càng nhiều càng tốt.
EDIT: Bây giờ tôi đã thực hiện bằng chứng khái niệm CORE-GROUP-CUSTOMER bằng cách sử dụng Google Guice 2.0 - thẻ @ImplementedBy chỉ là những gì chúng tôi cần. Tôi tự hỏi mọi người khác làm gì? Sử dụng nếu tất cả các nơi trên?
EDIT: Bây giờ tôi cũng cần chức năng này cho các ứng dụng web. Guice cho đến khi JSR-330 được đặt đúng vị trí. Bất kỳ ai có trải nghiệm phiên bản?
EDIT: JSR-330/299 hiện đang ở vị trí với việc thực hiện tham khảo JEE6 Weld dựa trên JBoss Seam và tôi đã thực hiện lại các proof-of-concept với Weld và có thể thấy rằng nếu chúng tôi sử dụng @Alternative cùng với ... trong beans.xml chúng ta có thể nhận được hành vi mà chúng ta mong muốn. I E. cung cấp một triển khai mới cho một chức năng nhất định trong CORE mà không thay đổi một chút trong các lọ CORE. Đọc ban đầu về đặc tả Servlet 3.0 cho biết nó có thể hỗ trợ cùng chức năng cho ứng dụng web tài nguyên (không phải mã). Bây giờ chúng ta sẽ thử nghiệm ban đầu trên ứng dụng thực tế.
+1 vì đây không phải là vấn đề của tôi. :) – cletus
Cletus, heh, vì vậy tôi chỉ liệt kê tất cả các công việc được giao cho tôi, và ngay lập tức 100k nghiệp? –
Nếu họ chắc chắn và đáng sợ như công việc này, chắc chắn rồi. :) – cletus