2012-07-02 29 views
5

Trước tiên, tôi đến (quay lại) với Java từ C#, vì vậy xin lỗi nếu thuật ngữ hoặc triết lý của tôi không hoàn toàn xếp hàng.Gói vs sự tách biệt dự án trong java

Đây là nền tảng: chúng tôi có một bộ sưu tập ngày càng lớn các công cụ hỗ trợ nội bộ được viết cho web. Họ sử dụng HTML5/AJAX/buzzwords khác cho giao diện người dùng và Java cho chương trình phụ trợ. Những công cụ này sử dụng một khung công tác nhẹ trong nhà để họ có thể chia sẻ một giao diện quản trị để bảo mật và cấu hình khác. Mỗi công cụ đã được viết bởi một tác giả riêng và tôi hy vọng xu hướng đó sẽ tiếp tục, vì vậy tôi muốn các tác giả trong tương lai dễ dàng "chuẩn hóa" trên thư viện của bên thứ ba mà chúng tôi đã quyết định sử dụng cho mọi thứ như DI, ​​kiểm tra đơn vị, ORM vv

gói đặt tên của chúng tôi hiện trông như thế này:

  • com.ourcompany.tools.framework
  • com.ourcompany.tools.apps.app1name
  • com.ourcompany.tools.apps.app2name

... v.v.

Vì vậy, đây là câu hỏi của tôi: nên mỗi ứng dụng (và khung công tác) này được coi là một dự án riêng biệt cho các mục đích thiết lập Maven, Eclipse, v.v ...?

Chúng tôi có thể có rất nhiều ứng dụng xuất hiện ở đây theo thời gian, vì vậy có vẻ như việc tách sẽ giữ cho các phụ thuộc rõ ràng hơn và để ai đó nhảy vào một công cụ dễ dàng hơn. Mặt khác, (1) có thể "chia nhỏ" các phần sâu hơn của một cấu trúc gói trên nhiều dự án là một mùi mã và (2) giữ chúng kết hợp sẽ làm cho các nhà văn công cụ có khuynh hướng sử dụng các thư viện của bên thứ ba. công cụ.

FWIW, bản năng ban đầu của tôi là tách chúng ra.

Điều gì nói bạn, rất kinh nghiệm về Java?

Trả lời

3

Tôi giữ các dự án của mình được tách ra, nhưng sử dụng pom mẹ để bao gồm tất cả các phụ thuộc và các thuộc tính phổ biến khác. Các công cụ/dự án riêng lẻ có tên và tham chiếu đến dự án mẹ và bất kỳ phụ thuộc dự án cụ thể nào, nếu có. Điều này làm việc để giúp giữ cho các thư viện và phụ thuộc phổ biến, vì các thư viện phổ biến đã được cấu hình xong, nhưng cho phép tôi tập trung vào phần cụ thể của codebase mà tôi cần làm việc.

+0

Tôi không biết khái niệm pom cha mẹ về xử lý phụ thuộc cho đến khi bạn đề cập đến nó. Tôi thực sự thích ý tưởng này để củng cố một số tiêu chuẩn hóa trên các ứng dụng. Các câu trả lời khác cũng tuyệt vời, nhưng pom cha mẹ cung cấp cho một trong những cạnh. Cảm ơn! –

7

Tôi hoàn toàn sẽ tách chúng ra. Với mục đích của Maven, hãy đảm bảo mỗi ứng dụng/dự án có các phụ thuộc thích hợp cho khung/ứng dụng để bạn không phải xây dựng mọi thứ khi bạn chỉ muốn xây dựng một ứng dụng.

1

Nếu có một phần của dự án có khả năng được sử dụng trên nhiều dự án, điều đó có ý nghĩa để rút ra. Nó sẽ làm cho nó sạch hơn một chút là tốt nếu bạn cần phải cập nhật mã trong một trong những dự án thường được sử dụng.

2

Tôi chắc chắn sẽ tách những thứ này thành các dự án riêng biệt.

Bạn nên sử dụng Maven để xử lý phụ thuộc/quy trình xây dựng tự động (cả cho thư viện chia sẻ nội bộ của bạn và phụ thuộc bên thứ ba). Sẽ không có vấn đề gì khi có nhiều ứng dụng tham khảo cùng một thư viện được chia sẻ - thậm chí bạn có thể giữ nhiều phiên bản xung quanh nếu cần.

Couple thưởng từ phương pháp này:

  • này buộc bạn phải suy nghĩ cẩn thận về thiết kế API của bạn cho các dự án chia sẻ đó sẽ là một điều tốt trong thời gian dài.
  • Nó sẽ có lẽ cũng cung cấp cho bạn biết về các chi tiết phù hợp với kiểm soát mã nguồn - tức là các nhà phát triển của bạn có thể kiểm tra và làm việc trên các ứng dụng hoặc mô-đun phụ trợ cụ thể riêng
0

Nếu bạn giữ chúng lại với nhau, bạn sẽ có ít trở ngại phát triển , xây dựng và triển khai các công cụ của bạn.

Chúng tôi đã có hoàn cảnh ngược lại, có nhiều dự án riêng biệt. Sau khi sáp nhập chúng thành một cây dự án, chúng tôi có năng suất cao hơn và điều này quan trọng hơn đối với chúng tôi hơn bất kỳ công ước nào có xu hướng.

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