Apakah ada pedoman untuk memutuskan kapan suatu kelas harus berada di assembly / DLL sendiri? Saya sering melihat dua aliran pemikiran:
1) Setiap "pengelompokan" kelas termasuk dalam DLL sendiri mis. Repositori, Layanan, DTO, Infrastruktur, dll.
2) Semuanya harus dalam DLL tunggal tetapi dipisahkan melalui ruang nama / folder misalnya memiliki "Core" DLL dengan ruang nama tambahan misalnya Core.Repositori, Core.Services, Core.DTO, dll.
Di tempat kerja kami hanya menyatukan semuanya dalam satu Majelis yang disebut "Bisnis". Ada beberapa folder tetapi tidak ada pemisahan nyata - objek bisnis (dengan logika, beberapa di antaranya bahkan tidak boleh kelas) disatukan dalam folder "BusinessObjects" tanpa perawatan. Hal-hal yang digunakan di lebih dari satu kelas ada di folder "Core". Utilitas ada di folder "Utilitas", infrastruktur akses data adalah folder "Data" - Anda dapat idenya.
Untuk modul baru yang sedang saya kerjakan, saya ingin / perlu memiliki lapisan akses data terpisah (pikirkan implementasi Repositori yang belum sempurna) tetapi saya tidak ingin hanya membuangnya di bawah folder "BusinessObjects" dengan 160 folder lainnya (!) kelas di sana. Pada saat yang sama saya khawatir tentang membuat Perpustakaan Kelas baru karena semua orang terbiasa memasukkan kelas di Perpustakaan tunggal; folder / namespace bisa berfungsi.
sumber
"Paman Bob" Martin dari Clean Code, ketenaran SOLID Principles telah menjabarkan tiga prinsip di sini :
Aturan umum adalah Anda harus menjaga jumlah proyek dalam solusi Anda serendah mungkin. Hanya pisahkan mereka jika Anda perlu melakukannya untuk menerapkan satu atau lebih cerita pengguna tertentu, atau jika memiliki satu perakitan menyebabkan masalah kinerja yang terukur (biasanya setelah mereka mencapai beberapa megabyte ukuran).
sumber
Beberapa prinsip panduan lainnya yang bekerja dengan saya:
Apakah Anda pikir Anda akan menggunakan kembali kode ini di proyek lain? Untuk satu grup aplikasi web terkait, kami memiliki satu modul terkait akun pengguna yang digunakan semua aplikasi, karena mereka semua menggunakan model yang sama untuk akun dan login pengguna. Saya telah melakukan hal yang sama dengan perpustakaan geometri dan matematika dan menggunakannya kembali dalam berbagai aplikasi, hanya dengan menyertakan DLL.
Apakah Anda ingin dapat memodifikasi / menggunakan kode ini tanpa menggunakan kembali / mengkompilasi ulang seluruh proyek? Terkadang berguna untuk membangun kembali modul, menyebarkan, dan memulai ulang aplikasi web.
Kedengarannya seperti dalam kasus Anda Repositori dasar dan generik dapat berguna lagi di masa depan, mungkin layak untuk memisahkannya menjadi DLL baru jika Anda bisa.
sumber