Semoga pertanyaan sederhana relativitas. Saya mulai mengerjakan proyek internal baru untuk membuat traktabilitas perangkat yang diperbaiki di dalam gedung.
Basis data disimpan dari jarak jauh di server web, dan akan diakses melalui API web (output JSON) dan dilindungi dengan OAuth. GUI ujung depan sedang dilakukan dalam WPF, dan kode bisnis dalam C #.
Dari sini, saya melihat berbagai lapisan Presentasi / Aplikasi / Datastore. Akan ada kode untuk mengelola semua panggilan terotentikasi ke API, kelas untuk mewakili entitas (objek bisnis), kelas untuk membangun entitas (objek bisnis), bagian untuk WPF GUI, bagian dari model tampilan WPF, dan sebagainya.
Apakah yang terbaik untuk membuat ini dalam satu proyek, atau membaginya menjadi proyek individu?
Dalam hati saya mengatakan itu harus beberapa proyek. Saya telah melakukan keduanya dengan cara sebelumnya, dan menemukan pengujian menjadi lebih mudah dengan solusi proyek tunggal, namun dengan beberapa proyek maka dependensi rekursif dapat muncul. Terutama ketika kelas memiliki antarmuka untuk membuatnya lebih mudah untuk diuji, saya telah menemukan banyak hal menjadi canggung.
sumber
Jawaban:
Itu tergantung pada ukuran proyek
Inilah pedoman yang cenderung saya gunakan
Sebuah proyek kecil, dengan beberapa halaman atau kurang, saya hampir selalu menyimpan satu proyek.
Jika lapisan Akses Data proyek kecil itu besar atau kompleks, saya mungkin memisahkannya ke dalam lapisannya sendiri, tetapi selain itu ia hanya duduk di foldernya sendiri.
Jika proyek lebih besar, saya hampir selalu memiliki proyek terpisah untuk DAL, dan pemisahan lebih lanjut tergantung pada di mana batas-batas antara fungsi aplikasi berada.
Jika aplikasi memiliki beberapa tujuan, masing-masing dengan pandangan itu sendiri, viewmodels, dll, maka saya biasanya akan memisahkan masing-masing bagian ke daerah itu sendiri. Jika setiap bagian kecil, saya memisahkannya dengan Folder. Jika setiap bagian besar, saya akan memisahkannya dengan sebuah proyek.
Jika saya memiliki beberapa proyek yang perlu referensi set yang sama objek (
ViewModelBase
,RelayCommand
, dll), saya akan membuat sebuah proyek hanya untuk objek infrastruktur bersama.Jika saya memiliki sejumlah besar gaya / templat / sumber daya bersama, saya akan membuat proyek hanya untuk itu.
Sebagai catatan, saya membuat kesalahan dengan proyek WPF besar pertama saya dan memisahkan mereka dengan menempatkan Model dalam satu proyek, Views di proyek lain, dan ViewModels di proyek ketiga. Saya dapat memberitahu Anda sekarang bahwa itu bukan cara yang tepat, karena pemeliharaan menjadi mimpi buruk :)
sumber
SearchView
,SearchViewModel
, danSearchResultModel
semua akan dikelompokkan bersama dalam sebuah folder dan saya telah menemukan itu membuat aplikasi lebih mudah untuk mempertahankan.Interface
untuk lapisan data, tetapi lapisan akses data aktual untuk Pencarian akan berada di perpustakaan DAL. Cukup sering saya memilikiInfrastructure
atauCommon
pustaka yang berisi kelas dasar umum, antarmuka, dan kelas pembantu.Saya telah melihat hasil terbaik dengan satu proyek per lapisan, ditambah proyek pengujian per lapisan. Saya telah melihat beberapa aplikasi yang tidak dapat diselesaikan dalam 10 atau lebih sedikit proyek dalam solusi, di mana solusinya mencakup segalanya .
Jangan terjebak dalam menggunakan proyek di mana Anda benar-benar ingin penamaan nama. Banyak proyek tidak menambahkan apa-apa selain biaya overhead tanpa keuntungan.
sumber
IMHO terpisah hampir selalu lebih baik. Saya hampir selalu memisahkan lapisan data saya kecuali proyek ini 100% sepele. Alasannya adalah karena lapisan data cenderung paling sering dilewatkan. Jarang Anda menghubungkan GUI ke beberapa lapisan data dan mengharapkannya berfungsi dengan baik. Skenario yang jauh lebih umum adalah bahwa Anda memiliki lapisan data tunggal, dan Anda ingin didistribusikan di beberapa GUI (ASP.Net, WPF, dan aplikasi Silverlight misalnya). Sungguh luar biasa ketika Anda bisa membangun proyek layer data dan meletakkan dll itu sebagai referensi di GUI berikutnya yang Anda buat.
sumber
Bagi saya, 4 * adalah angka ajaib. Satu proyek untuk setiap lapisan, dan satu proyek yang mendefinisikan semua antarmuka / DTO yang diperlukan untuk berkomunikasi di antara mereka.
* 7 jika Anda menghitung unit test
sumber
Saya selalu menggunakan solusi tunggal jika saya bekerja pada lapisan-lapisan yang berbeda, atau jika ada ikatan erat dengan mereka. Saya ingin menekan F5 dan minta semua proyek dibangun kembali jika diperlukan. Saya tidak berpikir ada cara yang "benar" untuk melakukannya.
sumber
Selera pribadinya, yang paling penting adalah konsisten . Saya pribadi memiliki proyek terpisah untuk setiap lapisan aplikasi sehingga pemisahannya jelas.
sumber
Peningkatan jumlah proyek berkaitan dengan mengaktifkan pengujian unit dan menyederhanakan grafik ketergantungan ke titik di mana segala sesuatunya tidak begitu rumit sehingga perubahan dalam satu bagian aplikasi memecah hal-hal di bagian aplikasi yang tampaknya tidak terkait.
Itu berhasil ketika saya melakukan semacam invensi ketergantungan, untuk menempatkan semua "kontrak", antarmuka, kelas abstrak, objek transfer data ke dalam satu unit. Di majelis lain saya meletakkan apa pun yang berbicara ke database. Tes unit mendapatkan perakitan mereka sendiri. Jika UI secara fundamental tidak dapat diuji coba (mis. ASP.NET winforms), maka ada manfaat yang signifikan untuk memisahkan UI menjadi kode yang dapat diuji dan kode yang tidak dapat diuji - masing-masing merupakan rakitan. Kadang-kadang beberapa kode mulai muncul yang tidak ada hubungannya dengan database, UI atau apa pun yang saya sebutkan sejauh ini - itu kode yang saya semacam berharap ada dalam kerangka NET. Kode itu saya akan dimasukkan ke dalam rakitan utilitas, atau setidaknya memasukkannya ke dalam apa pun rakitan root (mungkin yang dengan antarmuka.
Jika semua majelis merujuk semua majelis, atau hampir jadi, maka mereka harus digabung kembali menjadi satu majelis. Jika Anda atau orang-orang di tim Anda kurang disiplin untuk menjaga agar tidak menempatkan kode tingkat data di UI dan UI di tingkat data, maka sederhanakan semuanya dengan menggabungkan semuanya kembali menjadi satu lapisan.
Beberapa edisi Visual Studio mengalami masalah kinerja di sekitar 15 majelis, kadang-kadang tergantung pada jenis proyek apa yang ada. Meskipun demikian, membongkar file proyek secara strategis terkadang dapat membantu.
sumber
Satu-satunya alasan bagus untuk memiliki lebih dari satu proyek, adalah jika Anda perlu berbagi sekumpulan kelas dan file di beberapa aplikasi.
Jika proyek hanya digunakan oleh satu aplikasi, mereka seharusnya tidak dibuat di tempat pertama. Gunakan ruang nama saja. Menghemat masalah referensi melingkar, overhead dll, dan kebingungan proyek saat mencari file.
Baca artikel ini untuk penjelasan yang lebih dalam mengapa hal itu terjadi: http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio- solusi-file /
Dan seperti yang dinyatakan dalam artikel ini, saya akan menyambut siapa pun yang memiliki alasan yang sah untuk memiliki beberapa proyek selain dari berbagi kode di seluruh aplikasi untuk memberi tahu saya apa itu, karena saya ragu ada.
sumber