Bagaimana menyusun beberapa solusi / proyek yang tumpang tindih di .Net?

16

Saya baru-baru ini mulai bekerja untuk klien baru dengan basis kode lama di mana ada beberapa solusi .net, masing-masing biasanya meng-host beberapa proyek yang unik untuk solusi itu tetapi kemudian "meminjam" / "tautan" (tambahkan proyek yang ada) beberapa proyek lainnya yang secara teknis milik solusi lain (setidaknya jika Anda pergi dengan struktur folder di TFS)

Saya belum pernah melihat setup yang terjalin ini, tidak ada urutan pembangunan yang jelas, kadang-kadang proyek dalam solusi A hanya referensi dll langsung dari direktori keluaran proyek yang dihosting dalam solusi B, kadang-kadang proyek baru saja dimasukkan secara langsung bahkan jika berada JAUH dalam struktur folder.

Sepertinya semuanya telah dioptimalkan untuk kemalasan pengembang.

Ketika saya menghadapkan mereka dengan mengapa mereka tidak memiliki server CI mereka menjawab bahwa sulit untuk mengatur dengan kode yang diatur seperti itu. (Saya sedang menyiapkannya sekarang dan mengutuk organisasi kode ini)

Solusi disusun berdasarkan artefak penyebaran (hal-hal yang perlu dikerahkan bersama dalam solusi yang sama) yang saya pikir merupakan keputusan yang bijaksana, tetapi isi dari solusi tersebut (proyek) ada di semua tempat.

Apakah ada konsensus praktik terbaik untuk digunakan ketika menggunakan kembali perpustakaan kelas umum di beberapa solusi / penyebaran artefak,

  • Cara menyusun kode dalam VCS
  • Bagaimana memfasilitasi berbagi logika bisnis antara artefak penyebaran yang terpisah
AndreasKnudsen
sumber

Jawaban:

9

Saya tidak pernah menjadi penggemar termasuk proyek yang ada yang termasuk solusi lain. Ada terlalu banyak variabel di mana melakukan pengeditan pada proyek tersebut untuk 1 solusi benar-benar merusak sesuatu dalam solusi lain. Kemudian dengan memperbaiki masalah itu Anda akhirnya melanggar solusi asli. Busa, bilas, ulangi.

Ketika ketergantungan semacam ini bocor ke beberapa solusi, saya ingin memisahkan kode dependen ke dalam solusi SENDIRI dan membuat pustaka kotak-hitam yang kemudian dimasukkan sebagai referensi. Pemikiran saya adalah bahwa solusi Anda terjalin sehingga debugging dapat dilakukan sepenuhnya ke dalam proyek bersama untuk setiap solusi. Jika perpustakaan dibangun dan diuji dengan benar, debugging semacam ini benar-benar tidak perlu. Perpustakaan harus dapat berdiri pada kemampuannya sendiri dan harus diuji secara menyeluruh sehingga harapan setiap proyek konsumen akan terpenuhi secara konsisten.

Joel Etherton
sumber
3
Selain itu, refactoring sangat mudah hari ini, jadi jika Anda melakukan merasakan bahwa beberapa memacu-of-the-saat perubahan cukup penting untuk membuat di perpustakaan itu sendiri, Anda dapat membuat proyek aplikasi Anda sekarang dan bergabung ke perpustakaan kemudian , ketika Anda kurang terganggu oleh tugas Anda saat ini dan punya waktu untuk melakukan pengujian yang tepat.
Aaronaught
@Aronaught: +1 untuk itu.
Joel Etherton
5

Saya sebenarnya telah mengatur struktur TFS seperti yang Anda sebutkan dan sementara itu memang memberikan tantangan unik untuk CI, ia memiliki sejumlah manfaat yang berbeda. Satu yang jelas adalah ini mendukung dan mendorong komponenisasi yang tepat ke dalam proyek NET terpisah. Dan dengan demikian mendukung TDD yang baik dengan mendorong cakupan uji 100%. Langsung dari kelelawar saya melihat beberapa masalah yang dapat Anda atasi.

kadang-kadang proyek dalam solusi A dll hanya referensi langsung dari direktori keluaran proyek yang dihosting dalam solusi B, kadang-kadang proyek baru saja dimasukkan secara langsung bahkan jika itu jauh di dalam struktur folder.

Referensi biner untuk output dari direktori lain bukanlah pendekatan yang baik, dan menjadi pendekatan yang buruk ketika bercampur dengan referensi proyek juga. Cobalah untuk melakukan satu atau yang lain, lebih baik ubah referensi biner Anda ke referensi proyek untuk konsistensi setidaknya. Pada titik ini, masing-masing Solusi dapat mewakili satu aplikasi yang dapat dibangun atau tingkat aplikasi, (mis. SuperApp.sln, OtherAppServices.sln, OtherAppPresentationTier.sln).

Untuk membangun SEMUA proyek, saya sarankan untuk membuat Solusi Utama juga. Solusi Utama akan memiliki referensi proyek untuk segala sesuatu dan pada dasarnya ada untuk keuntungan tunggal dengan memiliki perintah build tunggal yang menangani semua proyek dalam rangkaian aplikasi. Pengembang tidak boleh menggunakan Solusi Utama untuk pengembangan aktif atau debugging. Ini membuat merakit artefak bangunan menjadi lebih mudah.

Penempatan kemudian dapat dilakukan dengan batch sederhana, PowerShell atau skrip Perl. Ini pada dasarnya akan membangun solusi yang sesuai atau solusi Master dan kemudian menyebarkan semuanya ke lingkungan yang sesuai. Ini dapat dengan mudah diintegrasikan ke dalam server CI apa pun jika dilakukan dengan benar.

• Bagaimana memfasilitasi berbagi logika bisnis antara artefak penyebaran yang terpisah

Buat proyek untuk logika bisnis umum atau miliki pemisahan yang lebih baik untuk logika bisnis yang lebih global atau universal. Semua solusi yang dapat digunakan yang ingin merujuk ini harus dilakukan dengan referensi proyek.

Dalam mengatur kode Anda di TFS, menjadi lebih mudah untuk mencapai ini dengan menjaga proyek bersama atau bersama di tingkat yang lebih tinggi di pohon direktori.

maple_shaft
sumber