Saya membantu mengelola tim eksternal yang mulai mengembangkan versi baru dari beberapa produk yang ada. Secara historis, tim ini selalu menggunakan model proyek tunggal dalam solusi tunggal untuk sekitar 30 modul di Visual Studio yang bekerja sama untuk menghasilkan bangunan yang dapat digunakan.
Ini berdampak buruk pada keandalan dan kualitas build, karena mereka tidak selalu mengirimi kami kode sumber yang terbaru. Kami mencoba menekan mereka untuk menyatukan semua kode yang direferensikan ke dalam satu solusi, tetapi kami mendapatkan beberapa penolakan - khususnya mereka terus berbicara tentang saling ketergantungan antar modul (baca "proyek" di Visual Studio) ditingkatkan jika semuanya ditempatkan di file solusi tunggal. Tidak ada kode dalam solusi terpisah yang digunakan di tempat lain.
Saya bersikeras ini omong kosong dan pola perkembangan yang baik akan menghindari masalah seperti itu.
Tim tersebut juga melakukan perbaikan bug dan pengembangan fitur baru pada produk yang sudah ada, yang pengalamannya paling sedikit dan mengalami masalah yang sama seperti pemecahan beberapa solusi. Kami telah ditolak akses ke kontrol sumber ( TFS ) mereka, dan pendekatan yang kami ambil untuk menyatukan basis kode adalah dengan mencoba dan setidaknya mengurangi jumlah pembaruan yang hilang dan lebih dari sesekali regresi (ya, bug yang diperbaiki mendapatkan kembali -diintroduksikan ke dalam produk) dengan mengatakan "kirim kami ZIP dari seluruh folder solusi sehingga kami dapat unzip, buka di Visual Studio, dan tekanF5 untuk pengujian ". Dalam hal struktur dan kualitas umum, kodenya cukup buruk dan sulit untuk didukung. Pengalaman ini adalah alasan saya bermaksud mendapatkan proses kerja yang tepat di awal siklus pengembangan sebanyak mungkin.
Apakah ada sesuatu yang saya lewatkan? Adakah alasan yang bagus untuk memisahkan semua kode itu? Untuk uang saya itu harus menjadi alasan yang meyakinkan bahwa itu akan menjadi pengetahuan umum, tapi saya lebih dari bersedia untuk mengakui bahwa saya tidak tahu segalanya.
sumber
Jawaban:
Anda tidak perlu memberi tahu mereka cara menyusun proyek mereka. Sebagai gantinya, buat persyaratan sulit bahwa Anda dapat membangun sistem dari sumber dengan menjalankan satu skrip tunggal, tanpa mendapatkan kesalahan apa pun. Jika skrip itu menjalankan Visual Studio atau Msbuild atau beberapa alat lain, dan jika itu dipanggil sekali, 50 atau 100 kali seharusnya tidak menjadi masalah.
Dengan begitu, Anda mendapatkan "tes kelengkapan" kode yang sama dengan yang Anda dapatkan dengan memasukkan semuanya ke dalam satu solusi. Tentu saja, skrip itu tidak memberi tahu Anda jika tim benar-benar memeriksa versi terbaru dari kontrol sumber mereka, tetapi memiliki seluruh kode dalam satu solusi tidak akan memeriksanya juga.
Sebagai balasan untuk "saling ketergantungan antara modul yang meningkat jika semuanya ditempatkan dalam satu file solusi" - ini adalah omong kosong yang terbukti , karena menambahkan proyek ke solusi tidak mengubah salah satu dari dependensi antara proyek, dependensi adalah hasil dari satu proyek referensi file yang lain, yang sepenuhnya independen dari solusi referensi file proyek mana. Tidak ada yang menghentikan tim itu untuk memiliki keduanya - solusi tunggal yang mereferensikan semua proyek, dan juga solusi individual masing-masing referensi hanya satu proyek.
Namun demikian saya akan menyarankan untuk menambahkan skrip build. Ini memiliki manfaat bahkan ketika hanya ada satu file solusi. Misalnya, ini memungkinkan seseorang untuk menjalankan VS build dengan konfigurasi yang disukai, memungkinkan Anda menyalin file akhir untuk penyebaran (dan tidak lebih) ke folder "deploy", dan dapat menjalankan beberapa alat dan langkah lain untuk membuat build selesai. Lihat juga F5 bukan proses membangun! , dan The Joel Test .
sumber
Itu akan tergantung pada seberapa banyak majelis yang dikompilasi digunakan kembali. Jika tidak ada penggunaan kembali rakitan, maka tidak ada alasan nyata untuk memisahkan "modul". Sebenarnya dalam pengalaman saya ini lebih merupakan penghalang.
Dalam tim pengembangan, saya adalah bagian dari kami memiliki perpustakaan independen yang telah kami tulis yang digunakan dalam banyak produk sebagai solusi terpisah, yang dalam hal ini masuk akal jika tidak kami harus mengkompilasi Aplikasi A agar Aplikasi B tetap mutakhir, yang mungkin diperlukan untuk menjaga agar Aplikasi C tetap mutakhir.
Setiap produk disimpan dalam solusinya sendiri, bahkan jika ada beberapa proyek yang membentuk produk. Dengan cara ini, kita hanya perlu membangun solusi Library untuk menjaga kode yang dibagikan tetap terbaru di semua produk yang dikembangkan.
sumber
Setiap perusahaan perangkat lunak yang pernah saya bekerja memiliki tim pengembangan inti yang menyediakan cabang utama yang mencakup kasus penggunaan mendasar dari produk perusahaan.
Pengembang cabang yang menggunakan repositori inti bertanggung jawab untuk menemukan peningkatan dan mengirimkan permintaan tarikan ke cabang utama untuk ditinjau. Ini biasanya bagaimana seseorang menjadi pengembang inti, dengan menunjukkan seseorang dapat memberikan kontribusi yang lebih baik daripada hanya mengipasi api konflik arsitektur.
Kemungkinan perusahaan Anda tidak memiliki sumber daya untuk segera "menyatukan semua kode yang dirujuk satu solusi". Menyarankan mereka melakukannya tanpa memahami kendala anggaran mereka (paling tidak) kemungkinan akan mencegah seseorang menjadi insinyur inti.
Jadi, rumuskan visi agung Anda menjadi beberapa permintaan tarikan yang menghancurkan sampai ke intinya, dan bersiaplah untuk mempertahankan diri Anda dalam ulasan!
sumber
Ada kernel kebenaran dalam pernyataan "Menggunakan satu solusi untuk beberapa proyek meningkatkan kompleksitas saling ketergantungan".
Sebuah solusi tunggal membuat referensi proyek dari proyek lain (yaitu menggunakan kembali kode proyek alias "memperkenalkan kompleksitas interdependensi") lebih mudah:
Jadi di tangan tim yang tidak disiplin menggunakan beberapa proyek dalam satu solusi dapat menyebabkan banyak ketergantungan yang diperkenalkan secara sembarangan. Namun, sebuah tim dapat lebih baik mencoba mempelajari disiplin yang diperlukan untuk mengelola dependensi dengan hati-hati dan kemudian menggunakan kemudahan penggunaan kembali yang menggunakan penawaran solusi.
sumber