Saya punya proyek java yang besar, dan kami menggunakan maven untuk siklus build kami. Proyek yang satu ini digunakan secara luas - dalam proyek lain, dalam berbagai aplikasi, beberapa di antaranya terkandung di dalamnya dan beberapa yang lain ... Sejujurnya, ini sedikit berantakan (berbagai bit ditambahkan pada waktu yang berbeda untuk spesifik tujuan), dan saya ingin membersihkannya sedikit. Juga, itu tidak sepenuhnya diuji (banyak bit telah ditambahkan tanpa unit yang tepat dan pengujian integrasi), dan ada beberapa tes yang membutuhkan waktu lama untuk berjalan atau tidak benar-benar lulus ... (uh-oh) - jadi tes dimatikan dalam siklus pembuatan pakar (sekali lagi, uh-oh).
Saya berpikir untuk memisahkan proyek besar ini menjadi proyek spesifik yang lebih kecil, sehingga sub-proyek 'final' (atau beberapa sub-proyek) akan mengambil berbagai sub-proyek yang diperlukan.
Pemikiran saya adalah sebagai berikut:
- jika saya memisahkan proyek besar ke dalam berbagai sub proyek, ini menjelaskan apa yang menjadi tanggung jawab masing-masing proyek.
- dengan memisahkan menjadi sub-proyek, saya kemudian dapat membersihkan pengujian masing-masing sub-proyek secara individual, dan mengaktifkan pengujian untuk sub-proyek dalam siklus pembangunan pakar.
Saya sedikit khawatir tentang apa dampak ini pada waktu pembangunan.
- Apakah memaksakan struktur pada proyek besar (yaitu menjadi sub proyek yang lebih kecil) memperlambat kompilator?
Juga, saya memiliki sedikit kekhawatiran tentang dampak apa yang mungkin terjadi pada waktu pengeditan dalam IDE (kami terutama menggunakan Intellij). Intellij tampaknya membangun setiap proyek secara bergiliran melalui pohon dependensi - yaitu jika C bergantung pada B bergantung pada A, dan saya mengubah A, ia tidak akan mencoba membangun B kecuali A mengkompilasi, dan seterusnya. Bisa dibilang itu menguntungkan, tetapi saya telah menemukan bahwa jika - misalnya, saya mengubah antarmuka dalam A yang banyak digunakan dalam B dan C, perlu beberapa waktu untuk memperbaiki semua kesalahan dari perubahan itu ...
Pertanyaan lain adalah bagaimana menggunakan kelas pabrik. Beberapa aspek proyek tergantung pada guci eksternal. Kadang-kadang (untungnya tidak sering) ini diperbarui, dan kami harus bermigrasi. Kami cenderung menangani ini dengan menggunakan kelas Pabrik yang menunjuk ke versi yang benar dari kode eksternal (jadi kami tidak harus mengubah semua implementasi di seluruh basis kode).
Saat ini semua ada dalam proyek besar, tetapi saya berpikir bahwa dengan beralih ke sub proyek, saya dapat mengembangkan proyek baru untuk penerapan kode eksternal baru, memastikan bahwa sub-proyek berfungsi penuh dan teruji, dan kemudian alihkan dependensi / kelas pabrik di proyek pengguna. Namun, ini menjadi lebih rumit dengan penggunaan antarmuka yang luas di seluruh proyek besar. Sebagai contoh
- sub-proyek A - berisi antarmuka
- sub-proyek B - tergantung pada A untuk antarmuka dan tabung eksternal lama
- sub-proyek C - tergantung pada B (dan dengan demikian A dan jar eksternal lama), dan berisi kelas Pabrik yang menggunakan implementasi antarmuka B
Jika saya perlu mengganti tabung eksternal B, saya dapat:
- buat sub-proyek B_ii - lagi tergantung pada A, dan sekarang jar eksternal baru
- setelah berfungsi penuh, saya dapat menambahkan ketergantungan C ke B_ii, dan mengubah kelas Pabrik untuk menggunakan implementasi antarmuka baru.
ketika itu semua berfungsi, saya kemudian dapat menghapus ketergantungan C ke B asli, dan jika diinginkan, hapus sub-proyek B.
Apakah itu cara yang masuk akal untuk melakukan ini?
Jadi, secara umum, pertanyaan saya adalah:
- Apakah ada yang punya pengalaman memecah proyek besar? Apakah ada tips / trik yang ingin Anda bagikan?
- Apa dampak ini terhadap perkembangan dan waktu pembangunan Anda?
- Apa saran yang bisa Anda tawarkan untuk menyusun proyek yang seperti itu?