Saya mencari beberapa jawaban di SO atau di sini, tetapi tanpa hasil, itu sebabnya saya akan bertanya kepada Anda.
Mari kita asumsikan saya memiliki dua proyek yang berbeda - misalnya bagian server dan bagian klien dari suatu aplikasi. Saya mengembangkan bagian saya sendiri, sementara teman saya membuat bagian kedua. Tetapi kami berdua harus menggunakan beberapa antarmuka umum seperti User
atau AccountInfo
atau ChangableAccount
... apa pun untuk memastikan kompatibilitas. Misalnya jika klien mengirim data Pengguna ke server, maka server harus beroperasi pada kelas yang sama. Sama dengan antarmuka dll. Selain itu, jika ada perubahan dalam antarmuka umum, kedua proyek harus menyesuaikan kodenya dengan situasi baru.
Satu-satunya solusi yang dapat saya lihat sekarang adalah, untuk membuat satu proyek ekstra di mana semua hal umum didefinisikan. Kami, saya dan teman saya, harus menambahkan proyek ini sebagai ketergantungan pada proyek utama (klien atau server). Proyek bersama dapat dikelola oleh beberapa sistem kontrol versi, jadi kami selalu memiliki kondisi terkini.
Solusi apa lagi yang akan Anda sarankan? Bagaimana masalah seperti itu diselesaikan di aplikasi profesional?
sumber
Jawaban:
Ini adalah langkah tepat pertama untuk berbagi bagian yang dapat digunakan kembali - dan ini bagian yang mudah. Bagian yang lebih menantang adalah untuk memutuskan apakah dua proyek yang menggunakan perpustakaan bersama harus memiliki siklus rilis independen (atau tidak), dan apakah mungkin "proyek A" menggunakan versi 1.0 lib Anda bersama, sementara proyek B menggunakan versi 2.0 pada saat yang sama .
Jika Anda ingin yang terakhir dimungkinkan, Anda harus memiliki skema versi ketat dan manajemen rilis untuk perpustakaan Anda (dan nomor versi sebagai bagian dari nama file perpustakaan, seperti yang disarankan oleh @RoryHunter). Anda juga harus berhati-hati tentang kompatibilitas mundur di lib Anda dalam situasi ini. Pustaka Anda harus dikelola sebagai produk terpisah, menambahkan tes unit untuk memastikan versi berbeda dalam produksi akan menjadi ide yang baik, dan alat seperti Maven juga masuk akal.
Namun, jika Anda ingin mencegah situasi itu, Anda harus mengelola "proyek A", "proyek B" dan lib Anda sebagai proyek bersama, dengan pengembangan gabungan, proses pembangunan dan pelepasan. Ini akan memungkinkan untuk mengubah antarmuka umum dari pustaka bersama jauh lebih sering daripada dalam skenario pertama. Dan Anda tidak perlu sesuatu seperti Maven atau nomor versi di nama file perpustakaan. Tetapi tradeoffnya adalah bahwa A dan B tidak dapat dikembangkan secara independen lagi.
sumber
Solusi Anda adalah yang tepat. Masukkan kode bersama ke proyek lain yang membuat file JAR sendiri, dan gunakan di kedua proyek. Saat membuat file JAR, Anda mungkin ingin memasukkan versi dalam nama, misalnya dalam gaya Debian;
Itu tidak mencegah masalah versi, tetapi seharusnya membantu. Saya tidak pernah menggunakan Maven, tetapi saya mengerti ini bisa membantu dalam situasi ini.
sumber
Persis seperti itulah. Net mengharapkan Anda melakukannya.
Abstrak benda-benda ini menjadi Majelis ketiga, dan referensi ini dari kedua proyek. Saya sarankan melakukannya sebagai Antarmuka, yang lebih bersih, tapi ...
Hati-hati dengan Serialisasi:
sumber
Seperti yang disarankan orang lain, proses berpikir Anda akurat. Secara profesional, sebagian besar akan menggunakan sesuatu seperti Maven atau Gradle untuk mengelola dependensi ini secara efisien.
sumber