Saya setuju dengan sebagian besar posting di sini, yang cenderung ke arah null
.
Alasan saya adalah bahwa menghasilkan objek kosong dengan properti yang tidak dapat dibatalkan dapat menyebabkan bug. Misalnya, entitas dengan int ID
properti akan memiliki nilai awal ID = 0
, yang merupakan nilai yang sepenuhnya valid. Jika objek itu, dalam keadaan tertentu, disimpan ke database, itu akan menjadi hal yang buruk.
Untuk apa pun dengan iterator saya akan selalu menggunakan koleksi kosong. Sesuatu seperti
foreach (var eachValue in collection ?? new List<Type>(0))
adalah bau kode menurut saya. Properti koleksi tidak boleh nol, selamanya.
Kasing tepi adalah String
. Banyak orang mengatakan, String.IsNullOrEmpty
tidak benar-benar diperlukan, tetapi Anda tidak selalu dapat membedakan antara string kosong dan null. Selain itu, beberapa sistem basis data (Oracle) tidak akan membedakan keduanya ( ''
disimpan sebagai DBNULL
), jadi Anda dipaksa untuk menanganinya secara merata. Alasannya adalah, sebagian besar nilai string berasal dari input pengguna atau dari sistem eksternal, sementara kotak teks atau sebagian besar format pertukaran tidak memiliki representasi berbeda untuk ''
dan null
. Jadi, bahkan jika pengguna ingin menghapus nilai, ia tidak bisa melakukan apa pun selain membersihkan kontrol input. Juga perbedaan nvarchar
bidang database nullable dan non-nullable lebih dari dipertanyakan, jika DBMS Anda bukan oracle - bidang wajib yang memungkinkan''
aneh, UI Anda tidak akan pernah mengizinkan ini, jadi kendala Anda tidak memetakan. Jadi jawabannya di sini, menurut saya adalah, menanganinya sama, selalu.
Mengenai pertanyaan Anda tentang pengecualian dan kinerja: Jika Anda melemparkan pengecualian yang tidak dapat Anda tangani sepenuhnya dalam logika program Anda, Anda harus membatalkan, pada titik tertentu, apa pun program Anda lakukan, dan meminta pengguna untuk mengulang apa pun yang baru saja ia lakukan. Dalam hal itu, penalti kinerja dari a catch
adalah yang paling tidak perlu Anda khawatirkan - harus bertanya kepada pengguna adalah gajah di dalam ruangan (yang berarti merender ulang seluruh UI, atau mengirim beberapa HTML melalui internet). Jadi, jika Anda tidak mengikuti anti-pola " Aliran Program dengan Pengecualian ", jangan repot-repot, lemparkan saja jika itu masuk akal. Bahkan dalam kasus batas, seperti "Pengecualian Validasi", kinerja benar-benar tidak menjadi masalah, karena Anda harus bertanya kepada pengguna lagi, dalam hal apa pun.
if (!DataExists)
.