Pikirkan dalam hal tabel pencarian pra-komputasi atau sesuatu. Pada titik apa lebih masuk akal untuk menggunakan database daripada nilai-nilai hardcoding dalam aplikasi saya? Nilai tidak akan berubah, dan mereka dipisahkan dengan baik dari pengembang pemeliharaan. Nilai 100, 1k, 10k, 100k? Saya ingin menyimpan sekitar nilai 40k. Sekarang ini adalah switch
pernyataan yang dibuat oleh mesin (yang VS2010 tidak senang).
edit:
Jika ada yang ingin tahu, inilah cara saya mendekati ini: Data saya dapat disimpan dalam dua array elemen 100k, jadi itulah yang saya lakukan. Butuh sekitar 20 detik untuk menghasilkan data, jadi saya melakukannya sekali, dan membuat serial menjadi sumber daya tertanam dengan BinaryFormatter. Membongkar data membutuhkan waktu sekitar 5 milidetik pada saat startup aplikasi, dan mengungguli implementasi basis data yang saya gantikan (nilai-nilai hard-coded ini disimpan sebelumnya) dengan hampir 45.000x.
sumber
Secara pribadi, saya OK untuk menyimpan sejumlah data, hardcoded ke dalam aplikasi, sampai tidak perlu men-tweak untuk satu penyebaran atau perbaikan terbaru.
Namun, menyimpan dan mengakses data menggunakan pernyataan saklar C #, adalah praktik yang buruk, karena pada pasangan yang ketat menyimpan data dan model akses data dan hanya menyiratkan satu metode metode akses (dengan parameter sakelar).
Saya lebih suka menyimpan data dalam Hashtable atau Kamus, dan menyediakan kelas terpisah untuk mengambil data, dan satu kali mengisi Kamus pencarian.
Baru-baru ini, saya merasa agak nyaman untuk menerapkan DSL kecil untuk menentukan aturan bisnis ( antarmuka yang lancar untuk SiteMap atau kalkulator pajak, cek pertanyaan "calc", metode untuk definisi aturan) dan kemudian menyediakan objek terpisah untuk menanyakan aturan-aturan ini. Teknik ini akan berlaku dengan baik untuk skenario sakelar kasus.
Salah satu manfaat bagus dari dekomposisi tersebut, adalah Anda dapat mengimplementasikan sejumlah Tampilan pada data Anda, tanpa menyentuh gumpalan garis XXXK, yang menentukan data itu.
sumber
Pernyataan beralih baris 40k sedikit dipertanyakan. Saya menganggap Anda masih perlu melakukan operasi permintaan bukan? Sudahkah Anda mencoba mengenkapsulasi data? Kemudian gunakan LINQ untuk melakukan operasi kueri pada koleksi untuk menguji kinerja. Dapatkan beberapa waktu yang konkret dengan menjalankan unit test dengan timer seperti StopWatch . Kemudian, jika Anda berpikir itu mungkin berhasil. Lihat apakah kinerja dapat diterima oleh pengguna.
sumber
Saya sudah memiliki persyaratan seperti ini dua kali. Aplikasi dirancang untuk berdiri sendiri tanpa pengaturan / akses basis data. Dalam kedua kasus saya menggunakan file XML untuk menyimpan data. Dalam yang pertama, yang ada di Kerangka 2.0, saya menggunakan panggilan parsing XML gaya lama untuk mencari data. Untuk yang lebih baru, pada Framework 3.5, saya menggunakan LINQ ke XML untuk menemukan apa yang saya butuhkan. Dalam kedua kasus, akses ke data dirangkum dalam kelas.
sumber
Kuncinya di sini adalah untuk memastikan antarmuka publik Anda merangkum implementasi Anda - tetapi itu bukan pertanyaan Anda dan tidak ada alasan untuk berpikir Anda belum melakukannya. Di luar itu, itu hanya masalah kinerja vs kesedihan (dan perbedaan kinerja mungkin tidak layak untuk diperhatikan). Sebagai solusi praktis, untuk masalah VS 2010, Anda selalu dapat memecah pernyataan kasus menjadi hierarki pernyataan kasus - tingkat teratas dapat memanggil satu dari 10 metode lainnya, masing-masing dengan pernyataan kasus 4000 kasus, misalnya. Anda dapat menempatkan masing-masing dari 10 ke dalam file itu sendiri jika Anda harus. Agak jelek, tetapi Anda tetap menghasilkan kode.
Adapun nomor untuk beralih ke DB-itu saja setiap kali tidak menggunakan DB menjadi masalah.
sumber
GetValuesForInput
metode -type, dan pernyataan besar saya tersembunyi dalam implementasi.Anda bisa menggunakan sesuatu seperti SQL Compact. Masukkan data dalam tabel dan tinggalkan file DB dalam proyek. Tabel lebih cocok untuk jumlah data itu daripada pernyataan switch.
sumber
Saya pikir kata kuncinya di sini adalah 'hampir tidak'
Jika data tidak pernah berubah - misalnya, nilai matematika yang telah dihitung sebelumnya, konstanta warna, dan sejenisnya - maka tentu saja, selama ukurannya dapat dikelola untuk Anda, simpanlah dalam kode. Perlu diketahui bahwa jika kinerja merupakan masalah, pernyataan kasus / pergantian akan sangat lambat dibandingkan dengan opsi lain.
Jika data hampir tidak pernah berubah - misalnya, kode area telepon, batas nasional, dan sejenisnya - saya mungkin akan melihat ke dalam menjaga data secara eksternal dalam beberapa cara. Terutama jika mulai menjadi lebih dari beberapa lusin nilai.
sumber
Jika Anda menyimpan sejumlah besar data ke dalam aplikasi Anda, maka program Anda mungkin memuat lebih lambat dan Anda mungkin mengekspos kode untuk risiko jika seseorang dapat bermain dengan binari atau dieksekusi.
Juga, jika program diedit berkali-kali, siapa tahu, mungkin Anda bisa membuat kesalahan dengan salah ketik angka secara tidak sengaja atau sebagai akibat dari perintah perubahan.
Mungkin di masa depan seseorang meminta untuk menjalankan kueri pada data, katakanlah, seseorang mungkin meminta rata-rata, dari kolom, dalam hal ini Anda harus mengubah aplikasi Anda dan menambahkan metode untuk menghitung setiap permintaan yang muncul oleh pengguna Anda dengan, lalu ikuti semua langkah untuk mempromosikan kode Anda ke produksi. Ini benar-benar tidak baik.
Memisahkan data dan kode adalah praktik yang baik khususnya jika datanya besar.
sumber