Di .NET (Visual Studio), kapan Anda membuat perakitan baru?

9

Saya sedang mengerjakan aplikasi Silverlight. Saya telah membaginya dalam beberapa majelis:

  • Domain
  • Repositori (semua yang ada di basis data Sterling)
  • UI
  • ...

Ini adalah bagaimana saya mempelajarinya, tetapi saya bertanya-tanya. Jika Anda tahu DLL tidak akan digunakan kembali, apakah perlu membaginya? Atau bisakah Anda meletakkan semuanya dalam satu rakitan dan menggunakan folder dan ruang nama agar tetap rapi?

Saya juga melihat proyek yang memiliki terlalu banyak majelis. Alih-alih menggunakan ruang nama yang seharusnya sesuai.

Jadi: kapan Anda membuat perakitan baru untuk beberapa kode baru? Adakah sumber yang bagus tentang hal ini? Dan apakah Anda membagi kode secara teknis (domain, data, ui, dll.) Dan / atau secara fungsional (yaitu administrasi pasien, pasien-medis, logistik rumah sakit, ... - mungkin hanya untuk aplikasi yang lebih besar, tingkat perusahaan)?

Peter
sumber

Jawaban:

1

Saya merekomendasikan membuat rakitan terpisah untuk kelas yang secara logis masuk ke dalam "modul". Tidak hanya bagus untuk digunakan kembali dan dirawat, tetapi juga cara untuk menegakkan jumlah dependensi paling sedikit di antara kelas-kelas.

Misi akan meminimalkan jumlah referensi ke majelis lain yang dibutuhkan setiap majelis, sebagian besar ini akan dilakukan melalui antarmuka dan acara. Memiliki kelas dalam majelis yang berbeda akan membuat ketergantungan sangat jelas. Bandingkan dengan jika Anda hanya menggunakan satu rakitan, maka sangat mudah untuk mengabaikan memikirkan dependensi karena semuanya dapat diakses.

Tentu saja Anda tidak perlu melebih-lebihkan tetapi pisahkan jika perlu. Pikirkan tentang hal ini seperti ini: "Kelas-kelas ini milik bersama dan tidak perlu tahu tentang kelas-kelas ini" dan berpisah sepanjang garis itu

Homde
sumber
1
Tergantung apa yang Anda maksud dengan "modul", tapi saya biasanya membagi logika terkait menggunakan namespace daripada rakitan. Ingat, ruang nama dapat menjangkau majelis. Assemblies adalah unit penyebaran dan oleh karena itu Anda harus mempertimbangkan memotong majelis Anda agar sesuai dengan skenario penempatan Anda.
Ed James
3
Bukan ide yang bagus. VS menjadi sangat lamban ketika sebuah solusi mengandung lebih dari beberapa proyek.
nikie
4
Jika VS Anda menjadi terlalu lambat, Anda menjalankan versi lama atau komputer lambat. Saya punya proyek besar dengan 30+ proyek yang dikompilasi dalam hitungan detik. Kemudian lagi saya punya banyak ram, core dan SSD :) Anda tidak boleh melebih-lebihkan tentu saja tetapi hanya pisahkan jika sesuai, pikirkan seperti ini "Kelas-kelas ini milik bersama dan tidak perlu tahu tentang kelas-kelas ini" dan terpisah di sepanjang garis
Homde
Menandai ini sebagai jawaban karena komentar tentang ketergantungan. Jawaban Ed James setidaknya sama berharganya dan benar, tetapi jawaban ini lebih berlaku untuk situasi saya.
Peter
2
Mengikuti pendekatan ini Anda bisa berakhir dengan sekelompok majelis: A, B, C, D, E, F, G, H, I, J, K. Di mana pun Anda referensi perakitan A, Anda juga harus referensi majelis bergantung nya: B, C, D. Tapi perakitan Ctergantung pada: E, F, G, Hjadi kita akan membutuhkan mereka juga. Jadi, setiap kali Anda membutuhkan beberapa fungsi AAnda harus menarik 7 majelis tambahan untuk membuatnya berfungsi; pastikan Anda mendapatkan versi yang benar dari setiap unit. Selamat datang di Neraka DLL baru.
Ed James
14

Majelis adalah unit penyebaran untuk aplikasi .NET; karena itu Anda harus mempertimbangkan mencocokkan potongan majelis Anda dengan arsitektur penempatan Anda.

Assemblies juga berguna ketika Anda membutuhkan kontrol versi terpisah pada beberapa kode. Misalnya, ketika Anda memiliki antarmuka umum yang akan mendapat manfaat dari kontrol versi independen, Anda harus memisahkan kode itu menjadi sebuah perakitan.

Ingat bahwa ruang nama dapat menjangkau majelis. Dalam banyak kasus sudah cukup untuk memisahkan perilaku menggunakan ruang nama. Lihatlah. NET mscorlib.dllyang dalam satu rakitan berisi kode yang mencakup sejumlah besar perilaku yang hanya dipisahkan oleh namespace.

Jika Anda ingin otoritas tentang hal ini, jangan lihat lebih jauh dari:

Pedoman Desain Kerangka Kerja

Pedoman Desain Kerangka Kerja: Konvensi, Idiom, dan Pola untuk Reusable .NET Libraries (2nd Edition) oleh Krzysztof Cwalina dan Brad Abrams.

Ed James
sumber
Terima kasih atas referensi buku. Saya akan memeriksanya. Bisakah Anda menguraikan arsitektur penyebaran? Bagaimana menyebarkan 10 file DLL berbeda dari menyebarkan 1? Kecuali Anda dapat memperbarui satu dari sepuluh file, sementara yang lain tetap tidak tersentuh?
Peter
1
@ Peter: jika Anda mengkodekan 10 majelis yang selalu digunakan bersama, maka Anda bisa menyederhanakan kontrol dan penerapan versi dengan menempatkan semua kode ke dalam satu perakitan. Jika 10 majelis tidak selalu digunakan bersama-sama maka majelis yang terpisah dapat bermanfaat.
Ed James