Pertanyaan Bagaimana mengatur proyek Java yang lebih besar - Projects vs Namespacing?


Saya bertanya-tanya apakah ada bacaan yang direkomendasikan, praktik terbaik, atau pendapat tentang cara mengatur proyek-proyek Java yang lebih besar.

Saya membuat pengamatan bahwa ada orang-orang yang membagi segalanya menjadi proyek (yaitu modul) dan membuat banyak proyek yang berbagi jaringan ketergantungan. Ini memiliki keuntungan bahwa kompilasi seringkali super cepat, tetapi ketika proyek menjadi besar tidak ada yang tahu lagi apa yang tergantung pada apa dan mengapa. Tidak berbicara tentang pustaka yang bergantung, konflik versi & co.

Alternatifnya adalah memiliki beberapa proyek seperti frontend, backend, .... Ruang nama melakukan pekerjaan.

Setiap pendapat, bacaan lebih lanjut siapa pun bisa merekomendasikan?


5
2017-09-13 14:33


asal


Jawaban:


Proyek yang sangat besar perlu memiliki beberapa cara untuk melacak semua pustaka dan dependensi lain yang digunakannya. Standar defacto untuk melakukan ini adalah Maven. Ini pasti cara terbaik untuk mulai melacak apa yang sedang terjadi dalam aplikasi Anda.

Kemudian Anda dapat memutuskan cara membagi aplikasi Anda. Pada dasarnya, apa yang Anda coba lakukan di sini adalah membagi aplikasi Anda menjadi bagian fungsional yang lengkap. Misalnya, jika Anda memiliki situs web yang memiliki formulir kontak, galeri foto, keranjang belanja, dan forum, Anda akan membagi proyek menjadi bagian-bagian yang berisi masing-masing modul yang berbeda.


3
2017-09-13 14:49



Segera setelah Anda mulai membagi proyek besar menjadi proyek yang lebih kecil, Anda menemukan banyak pelacakan ketergantungan yang biasanya tidak perlu Anda pertimbangkan. Anda dapat mengelola ini sendiri atau Anda dapat menggunakan perangkat lunak yang sudah menangani banyak masalah inti.

Saya akan merekomendasikan Ivy milik Apache. Ini terintegrasi dengan baik dengan Apache's Ant, dan memiliki file konfigurasi terpisah (yang akan diperiksa) untuk melacak apa yang diperlukan untuk setiap jenis build.

Apache's Maven adalah pilihan bagus lainnya; Namun, itu jauh lebih banyak dari Ivy Apache. Terkadang, "lebih banyak" berarti Anda melakukan lebih sedikit dari apa yang akan Anda lakukan, terkadang "lebih banyak" berarti Anda melakukan (dan mengkonfigurasi) hal-hal yang tidak Anda lakukan sebelumnya. Tergantung pada kesesuaian latihan Anda dengan Maven, migrasi ke Maven mungkin mudah atau sangat sulit.

Selain itu, dengan menggunakan Ivy, Anda dapat mengatur repositori pribadi Anda dari file jar "diizinkan" untuk menarik dari, dan itu akan membuat pengauditan kode jauh lebih mudah. Pada dasarnya, konfigurasi ulang ivy untuk tidak menarik dari web, tetapi untuk menarik dari repositori lokal Anda saja, dan kemudian mengontrol akses ke repositori untuk hanya mengizinkan file jar yang ditinjau untuk mendapatkan lisensi yang dapat diterima.

Setelah Anda memiliki perangkat lunak, Anda dapat membagi proyek menjadi bagian yang lebih kecil. Ini akan memungkinkan Anda untuk melakukan hal yang benar (jika proyek Anda mendukung dekomposisi kecil) daripada hal yang bijaksana (beberapa potongan besar yang mungkin tidak benar-benar membeli Anda banyak dalam pemeliharaan dekomposisi). Sejauh mana untuk membuat pemotongan, itu sangat tergantung pada spesifikasi aplikasi Anda.

Banyak potongan kecil cenderung lebih mudah bagi orang baru untuk dicerna satu per satu. Mereka juga membuat orang berpikir tentang di mana fungsionalitas akan ditambahkan ke proyek; namun, ini membutuhkan waktu dan upaya untuk menguraikan dan memisahkan semua komponen. Sisi positifnya adalah bahwa pada umumnya lebih mudah untuk menguji dan memvalidasi sesuatu yang lebih kecil, sisi negatifnya adalah bahwa ini adalah jalan yang lebih panjang untuk menguraikan satu kumpulan tanggung jawab monolitik ke dalam banyak unit yang kecil, terintegrasi dengan baik namun secara fungsional berbeda.

Semoga berhasil


5
2017-09-13 14:41



Sebenarnya, Anda akan ingin memanfaatkan kedua proyek dan ruang nama.

Namespacing adalah alat penting untuk membedakan apa tujuan kode di tingkat kode. Terlepas dari apa proyek kelas berasal, paket harus memberi saya beberapa gagasan tentang tujuannya.

Pada tingkat yang lebih tinggi, lebih mudah untuk mengelola bangunan dan lingkungan pengembangan Anda dengan memisahkan kode Anda ke dalam proyek. Misalnya, jika Anda mengembangkan UI, mengapa Anda harus memiliki kode database dimuat ke dalam IDE Anda? Itu hanya kekacauan tambahan di ruang kerja Anda. Ini juga mempermudah pembagian fungsi bersama antara berbagai proyek. Ini tentu saja akan menyebabkan membutuhkan beberapa bentuk manajemen ketergantungan, yang salah satu dari alat-alat yang disebutkan seperti Maven atau Ivy akan cukup.

Sebuah catatan penting. Jangan gunakan paket terpisah antara proyek. Ini menyebabkan mimpi buruk jika Anda atau siapa pun yang pernah menggunakan kode Anda ingin melakukannya di lingkungan OSGi. Jadi, ruang nama Anda harus unik dalam sebuah proyek, meskipun mereka harus berbagi akar yang sama dengan proyek terkait lainnya.


1
2017-09-13 15:14