Tôi có một dự án java lớn và chúng tôi sử dụng maven cho chu trình xây dựng của mình. Dự án này được sử dụng rộng rãi - trong các dự án khác, trong các ứng dụng khác nhau, một số dự án được chứa trong đó và một số dự án khác ... Thành thật mà nói, đó là một mớ hỗn độn (các bit khác nhau được thêm vào vào các thời điểm khác nhau mục đích) và tôi muốn dọn dẹp nó một chút. Ngoài ra, nó chưa được kiểm tra đầy đủ (rất nhiều bit đã được thêm vào mà không có kiểm thử đơn vị và tích hợp thích hợp) và có một số thử nghiệm mất nhiều thời gian để chạy hoặc không thực sự vượt qua ... (uh-oh) - vì vậy các thử nghiệm được tắt trong chu trình xây dựng maven (một lần nữa, uh-oh).
Tôi đang suy nghĩ về việc tách dự án lớn này thành các dự án cụ thể nhỏ hơn, sao cho tiểu dự án 'cuối cùng' (hoặc một số tiểu dự án) sẽ nhận các dự án phụ khác nhau mà nó cần.
Suy nghĩ của tôi như sau:
- nếu tôi tách dự án lớn thành các tiểu dự án khác nhau, điều này cho thấy rõ trách nhiệm của từng dự án là gì.
- bằng cách tách thành các tiểu dự án, sau đó tôi có thể dọn sạch thử nghiệm của từng tiểu dự án và bật thử nghiệm cho dự án phụ đó trong chu trình xây dựng maven.
Tôi hơi lo ngại về những gì tác động này có thể có trong thời gian xây dựng.
- Việc áp đặt một cấu trúc lên dự án lớn (tức là vào các dự án con nhỏ hơn) sẽ làm chậm trình biên dịch?
Ngoài ra, tôi có một chút lo ngại về tác động của việc này có thể có thời gian chỉnh sửa trong IDE (chủ yếu chúng tôi sử dụng Intellij). Intellij dường như xây dựng từng dự án lần lượt thông qua cây phụ thuộc - tức là nếu C phụ thuộc vào B phụ thuộc vào A và tôi thay đổi A, nó sẽ không cố gắng xây dựng B trừ khi A biên dịch, v.v. Có thể cho rằng đó là lợi thế, nhưng tôi đã thấy rằng nếu - ví dụ, tôi thay đổi giao diện trong A được sử dụng rộng rãi trong B và C, phải mất một thời gian để sửa tất cả các lỗi từ thay đổi đó ...
Một câu hỏi khác là làm thế nào để sử dụng các lớp học nhà máy. Một số khía cạnh của dự án phụ thuộc vào lọ bên ngoài. Thỉnh thoảng (rất may là không thường xuyên) những điều này được cập nhật và chúng tôi phải di chuyển. Chúng tôi có xu hướng xử lý việc này bằng cách sử dụng lớp Factory chỉ ra các phiên bản chính xác của mã bên ngoài (vì vậy chúng tôi không phải thay đổi tất cả các triển khai trong toàn bộ cơ sở mã).
Hiện tại đây là tất cả trong dự án lớn, nhưng tôi nghĩ rằng bằng cách chuyển sang các dự án phụ, tôi có thể phát triển một dự án mới để thực hiện mã bên ngoài mới, đảm bảo rằng dự án phụ có đầy đủ chức năng và được thử nghiệm, và sau đó chuyển đổi các phụ thuộc / lớp nhà máy trong dự án người dùng. Tuy nhiên, điều này trở nên phức tạp hơn khi sử dụng rộng rãi các giao diện trong suốt dự án lớn. Ví dụ
- tiểu dự án A - chứa các giao diện
- tiểu dự án B - phụ thuộc vào A cho các giao diện và bình ngoài cũ
- tiểu dự án C - phụ thuộc vào B (và do đó là A và bình ngoài cũ) và chứa một lớp Factory sử dụng các triển khai giao diện của B
Nếu tôi cần thay đổi bình bên ngoài của B, tôi có thể:
- tạo dự án con B_ii - một lần nữa phụ thuộc vào A, và bây giờ jar bên ngoài mới
- một khi đầy đủ chức năng, tôi có thể thêm phụ thuộc của C vào B_ii và thay đổi lớp Factory để sử dụng các triển khai giao diện mới.
khi tất cả đều hoạt động, sau đó tôi có thể loại bỏ sự phụ thuộc của C vào B ban đầu và nếu muốn, hãy loại bỏ tiểu dự án B.
Đó có phải là một cách hợp lý để đi về điều này?
Vì vậy, nói chung, câu hỏi của tôi là:
- Có ai có bất kỳ kinh nghiệm về việc phá vỡ các dự án lớn? Có bất cứ lời khuyên / thủ thuật nào mà bạn muốn chia sẻ không?
- Điều này có tác động gì đến thời gian phát triển và xây dựng của bạn?
- Bạn có thể đưa ra lời khuyên nào về việc cấu trúc một dự án như vậy?