2009-05-01 22 views
6

tôi xác định một dự án như một thư mục SVN chứa thân cây, cành, thẻ phụ dirsLàm thế nào Hạt là SVN "dự án" của bạn:. Một dự án lớn có chứa một số ứng dụng releated hoặc một "dự án' cho mỗi ứng dụng

tiêu chí gì bạn sử dụng khi xác định khi nào để chia một dự án thành hai hoặc hợp nhất nhiều dự án thành một? - Một ứng dụng cho mỗi "Dự án" với một dự án chung cho nguồn và tài nguyên chung? - Một dự án lớn "" chứa tất cả nguồn và tài nguyên cho ứng dụng?

Dự án đơn lẻ hoặc đa dự án đều có điểm cộng và trừ. đang hướng tới một dự án duy nhất và tôi đang cố gắng tìm hiểu xem đây có phải là cách tiếp cận đúng hay không.

Các dự án chia nhỏ cho phép khả năng kiểm soát các phần khác nhau của bộ phần mềm kết hợp thay đổi như thế nào. Thư viện chung có thể là phiên bản và các ứng dụng khác nhau có thể chọn sử dụng một phiên bản cụ thể (phương pháp quản lý maven dep).

Chia dự án cũng tạo nhiều phân cấp lớp làm cho mã khó hiểu hơn một cách tổng thể và có khả năng dẫn đến sao chép mã. Tôi cho rằng thiết kế phù hợp của cấu trúc tổng thể và mối quan hệ giữa các thành phần sẽ là chìa khóa để quản lý chi phí này.

Cách tiếp cận dự án thống nhất sẽ giúp nhà phát triển dễ dàng hơn trong việc thiết lập không gian làm việc và cung cấp một phân cấp lớp đơn. Đây là một con dao hai lưỡi vì nó cũng sẽ ném nhiều thông tin hơn ở nhà phát triển (quá nhiều lớp để hiểu).

Vì vậy, khi bạn đang cố gắng quyết định nơi kết hợp và nơi chia tách, bạn sử dụng quy tắc nào?

Trả lời

0

Cảm ơn bạn đã nhập. Tôi sẽ không "chọn" một câu trả lời bởi vì tôi nghĩ tất cả đều có những điểm quý giá trong họ. Tránh tối ưu hóa sớm có vẻ quan trọng như giữ cách bố trí đơn giản nhất có thể trong thời gian này. Chúng tôi đang chuyển sang một dự án có chứa các ứng dụng vì 90% thời gian chúng tôi phát hành TẤT CẢ cùng nhau. Do đó, để làm phức tạp vấn đề với một ứng dụng cho mỗi dự án dường như không có ý nghĩa. Ngay cả khi chúng ta đi đến maven, có khả năng tất cả các tạo phẩm maven cho một phiên bản nhất định sẽ được tạo ra từ cùng một nhánh. Chúng ta luôn có thể thay đổi nó sau này nếu cần sử dụng lịch sử SVN và mắt cá để giữ cho chúng ta lành mạnh.

Chúng tôi sẽ cấu trúc lại bố cục nguồn giống như chúng tôi sẽ cấu trúc lại nguồn. Khi một dự án bắt đầu "ngửi thấy mùi" từ một chu kỳ và tình trạng phụ thuộc chúng ta sẽ phá vỡ nó, nhưng không phải trước đó. Tôi có thể sẽ sử dụng chu vi trong thời gian không chu vi trong không gian: thời gian để xây dựng kiểm tra &, thời gian để kiểm tra. Nếu tôi có một cây 1GB mà tôi có thể kiểm tra trong < 10 phút và xây dựng/thử nghiệm trong < 30 phút tôi không thực sự cần phải phá vỡ nó trừ khi tôi được yêu cầu để phát hành các phần của nó thường xuyên.

Vì vậy, cảm ơn cho đầu vào. Nó đã thực sự hữu ích trong khung của tôi câu hỏi cho tôi nhóm và đánh giá các tùy chọn.

1

Tôi sử dụng các dự án riêng biệt và kết hợp chúng để tạo thành giải pháp thông qua svn: externals.

3

SVN Book có một cuộc thảo luận tốt về cả hai cách tiếp cận.

Cuối cùng, tôi sẽ chọn bất kỳ điều gì cảm thấy tự nhiên hơn đối với người dùng lưu trữ.

Cá nhân, tôi đã ưu tiên một cách tiếp cận thân cây/thẻ/nhánh SVN với tất cả các dự án mã thực tế của tôi trong các thư mục riêng của chúng bên trong các thư mục đó.

Tuy nhiên, đối với cơ sở mã lớn hơn (tôi chỉ quản lý 3-4 dự án nhỏ là một phần của một giải pháp duy nhất), tôi rất coi trọng việc thay đổi sang phương pháp tách.

4

Chúng tôi đặt tất cả các dự án liên quan đến một ứng dụng trong một đại diện SVN chỉ nhằm mục đích bảo trì, tập trung mã cơ sở của ứng dụng trong một kho lưu trữ và khả năng quản lý các phụ thuộc lẫn nhau giữa các tài nguyên khác nhau của ứng dụng.

chúng tôi thường phân loại tài nguyên của mình thành các thư mục khác nhau trong phạm vi thân cây. phân loại đó chủ yếu dựa trên nhóm chức năng/mô-đun hoặc nhóm theo nhóm [DAL, BLL, GUI, v.v.]. đó là hoàn toàn tối đa cách bạn đã cấu trúc mã. Hi vọng điêu nay co ich.

+0

Một lý do khác cho SVN Rep duy nhất là dễ duy trì người dùng quyền cho repo SVN. – Vikram

2

Tôi sử dụng cả dự án riêng biệt và dự án kết hợp tùy thuộc vào quy mô dự án. Đối với các dự án lớn của chúng tôi, mỗi dự án nằm trong một kho lưu trữ riêng biệt và có các quy trình xây dựng và triển khai độc lập. Đối với các dự án nhỏ hơn của chúng tôi, chúng tôi có kho lưu trữ "công cụ" để chứa chúng, với mỗi tiểu dự án là thư mục con của thư mục gốc.

Tôi cũng duy trì một kho lưu trữ "cá nhân", nơi mọi người có thể lưu trữ các chương trình thử nghiệm một lần, hoặc những thứ khác có thể hưởng lợi từ kiểm soát nguồn và sao lưu tập trung, nhưng không thuộc dự án độc lập.

1

Một ứng dụng/mô-đun được triển khai độc lập cho mỗi dự án. Sử dụng một dự án đơn lẻ làm cho việc giới thiệu các chu kỳ phát hành trở nên khó khăn nếu bạn biết rằng bạn cần quản lý phụ thuộc Maven với một mô-đun phụ thuộc vào việc triển khai ổn định các mô-đun khác. Nó cũng có thể dẫn đến những người chỉ sử dụng mã tìm kiếm ngẫu nhiên hữu ích từ các ứng dụng khác trực tiếp thay vì tính toán nó ra để giữ biểu đồ phụ thuộc Sane (tm).

Bạn nên làm thử nghiệm tích hợp sử dụng dãy phòng thử nghiệm thích hợp và thông lệ CI tại xác định rõ ràng, chứ không phải bằng cách dựa vào nửa mã của bạn thất bại trong tất cả của một đột ngột nếu phá vỡ một phần.

Một vấn đề khác với việc có một uber-dự án duy nhất là nó khá phiền hà cho người sử dụng git-svn mà chỉ làm việc trên một mô-đun duy nhất.

0

Giữ kho SVN riêng biệt cho các dự án riêng biệt. Điều cuối cùng bạn muốn là phải có một Merge Day

+0

Bài viết về ngày hợp nhất là nhiều hơn về sự ngu dốt thay vì sau đó là những tệ nạn của việc giữ nhiều dự án trong một kho lưu trữ. –

1

Grow hữu cơ. Pre tối ưu hóa là gốc rễ của tất cả các điều ác, Dijkstra đã từng nói. Cũng nên giữ YANGI (bạn sẽ không cần nó) trong đầu.

Mọi ứng dụng đều có thư mục riêng với thân cây/thẻ/chi nhánh. Nếu một dự án trong một ứng dụng được thực sự lớn, sau đó nó được đẩy vào thư mục riêng biệt của nó và có thể được liên kết với ứng dụng tại thời gian xây dựng (hoặc thậm chí svn: externals).

Điều đó nói rằng, nếu yêu cầu dự án của bạn là để phát triển một ứng dụng phức tạp được viết bởi 10 nhà phát triển và bạn là gatekeeper hoặc xây dựng tổng thể sau đó bạn có thể xem xét lựa chọn thay thế phức tạp hơn.

+0

Tôi không nghĩ rằng việc tối ưu hóa trước cũng giống như lập kế hoạch tổ chức ở cấp cao. –

+0

Đó là Donald Knuth, người đã đưa ra nhận xét "gốc rễ của tất cả những điều ác": https://en.wikipedia.org/wiki/Program_optimization#When_to_optimize –

0

không có câu trả lời 'tốt' ở đây, nhưng tôi nghĩ rằng cần phải có một sự phân biệt giữa Repos SVN có chứa 1 hoặc 2 dự án, và những người khác có chứa 100.

Tôi duy trì một repo SVN đã được di chuyển từ VSS, nó có hàng trăm "dự án" trong đó, không ai trong số chúng được tổ chức theo cấu trúc trunk/branch/tag (trên thực tế tôi nghĩ rằng cấu trúc đó thực sự không cần thiết và không hữu ích sau khi tôi đã sử dụng SVN trong một thời gian, nó chắc chắn không giúp đỡ khi bạn phải gắn thẻ 2 hoặc 3 dự án như là một thay đổi duy nhất).

Chúng tôi duy trì một thư mục dự án cho tất cả các phần mềm được duy trì của chúng tôi, theo đó chúng tôi có các thư mục con cho cấu hình và một thư mục khác cho nguồn. Theo chúng tôi có số phiên bản sản phẩm - vì vậy, chúng tôi chỉ có khái niệm về thân cây, chúng tôi chỉ có thư mục thẻ - số cao nhất là thân cây (chúng tôi phải thực hiện việc này vì chúng tôi phải hỗ trợ nhiều phiên bản của dự án cùng một lúc). Việc hợp nhất xảy ra khi cần thiết, vì vậy nếu tôi cập nhật lỗi trong dự án A, phiên bản 3.0; Tôi sẽ hợp nhất những thay đổi đó với phiên bản 4.0 và v5.0.

Nếu tôi làm repo chỉ với 1 hoặc 2 dự án, tôi có thể bị cám dỗ giữ cấu trúc chi nhánh/thẻ, nhưng mặt khác - tôi có thể giữ các thư mục rõ ràng trong cây chính (giả sử Tôi đã không phát hành thường xuyên, đủ để gắn thẻ thường xuyên) (Tôi sử dụng số sửa đổi như là một 'thẻ' BTW, và tôi lưu trữ các tập tin nhị phân trong đó. Vì vậy, nếu tôi cần để có được một phiên bản cũ cụ thể, tôi có thể lấy nhị phân phải từ tìm kiếm tại log)

Thật đáng ngạc nhiên khi quản lý khi xem xét tôi có một repo 10Gb với một revnum hiện lên tới 300.000 với nhiều mã cũ trong đó cũng như mới hơn. Tôi muốn giới thiệu cấu trúc cho người khác và sẽ sử dụng lại nó.

Ngẫu nhiên, một thẻ lý do khác dir sẽ không hoạt động đối với chúng tôi là vì chúng tôi phát hành mỗi khi có lỗi hoặc yêu cầu thay đổi, dù nhỏ đến mức nào. Thư mục thẻ của chúng tôi sẽ không thể quản lý sau một thời gian, đây là lý do tại sao chúng tôi sử dụng revnum làm thẻ - chúng tôi có thể kết hợp nó với trình theo dõi lỗi để giữ cho nó dễ đọc hơn.

Vì vậy, để tóm tắt trong thô, chúng ta có một cấu trúc thư mục như thế này mà v1 và v2 là phiên bản sản phẩm:

maint/source/v1.0/projectA 
maint/source/v1.0/projectB 
maint/source/v2.0/projectA 
maint/source/v2.0/projectB 
etc 

rõ ràng, chúng ta có thể đặt một dir chi nhánh dưới 'nguồn', và một chi nhánh/thẻ theo từng tiểu dự án nhưng điều đó sẽ trở nên phức tạp nếu chúng tôi cần phát hành 2 tiểu dự án như một yêu cầu thay đổi duy nhất (như chúng tôi thường xuyên thực hiện). Đặt một thẻ con dưới thư mục nguồn sẽ có nghĩa là chúng tôi gắn thẻ mọi thứ, khi chỉ có một tiểu dự án đã thay đổi (không phù hợp với yêu cầu của chúng tôi để theo dõi từng tiểu dự án riêng lẻ)

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