Jenis ada karena suatu alasan, jika mereka menambahkan tidak ada manfaat maka kita tidak akan memilikinya dan tidak akan menggunakannya dan kita hanya akan memiliki "jenis" dan semuanya akan seperti itu. Mereka tidak hanya nyaman tetapi juga menambah keamanan dan efisiensi. Berikut ini adalah daftar mengapa Anda harus selalu bertahan mengetik dalam format asli mereka dan bukan sebagai string . Saya menggunakan DateTime
sebagai contoh sebagian besar waktu tetapi prinsip yang sama berlaku untuk semua tipe primitif seperti bilangan bulat, desimal, biner, dll.
Penyimpanan data
Kendala
Ketik Kendala
Hampir semua penyimpanan data memungkinkan untuk menentukan batasan pada data, ini termasuk batasan tipe. Salah satu manfaat utama dari menentukan DateTime
contoh adalah bahwa data yang disimpan akan dibatasi untuk jenis itu. Tidak akan mungkin untuk memasukkan apa pun selain waktu tanggal terlepas dari bagaimana data dimasukkan ke dalam toko. Yang terakhir ini penting untuk sistem yang lebih besar di mana ada beberapa proses yang berinteraksi langsung dengan toko. Ini juga termasuk mencoba menambahkan tanggal yang salah seperti 30 Februari, (tahun apa saja) karena Februari hanya dapat memiliki 29 hari pada tahun kabisat dan 28 hari untuk tahun tidak kabisat.
Kendala Validasi
Ada juga kendala validasi yang dapat diimplementasikan di Data Store seperti memastikan bahwa tanggal yang dimasukkan tidak melebihi tanggal saat ini atau bahwa tanggal mulai terjadi sebelum tanggal akhir.
Operasi
Sebagian besar penyimpanan data juga memiliki operasi / fungsi seperti DateAdd
atau DatePart
di MS Sql Server. Ini memungkinkan Anda untuk mulai memfilter atau memilih data tertentu saat data masih tersimpan (belum diambil ke aplikasi).
Format yang diterima secara universal
Dengan menggunakan tipe asli, pengembang atau sistem lain yang juga berinteraksi dengan toko tidak harus diberi tahu tentang detail kecil tentang bagaimana tipe primitif itu disimpan. Ini bukan kasus jika tipe itu disimpan sebagai string, maka Anda harus memastikan bahwa semua orang memahami format DateTime
representasi string itu. Sistem ini menjadi rapuh ketika berurusan dengan data yang mencakup lokal, wilayah, dan budaya dalam asal data, lokasi fisik aplikasi, dan atribut pengguna akhir / sistem yang berinteraksi dengan data tersebut. Contoh: format tanggal di satu negara mungkin MM / dd / yyyy (seperti di AS) tetapi di negara lain bisa jadi dd / MM / yyyy, mendeteksi perbedaan itu menjadi hampir mustahil.
Kecepatan
Kecepatan pengambilan, kecepatan validasi, kecepatan operasi dan efisiensi penyimpanan juga merupakan faktor penting. Contoh kecepatan pengambilan: penyimpanan data memungkinkan untuk indeks pada kolom dan indeks ini umumnya dapat lebih efisien digunakan jika jenis disimpan dalam format aslinya.
Aplikasi
Akses data
Mengeksekusi kueri terhadap toko menjadi lebih mudah menggunakan sistem tipe asli karena pengembang, sekali lagi, tidak perlu menebak format penyimpanan. Hampir semua penyedia aplikasi penyimpanan data ( contoh: ado.net ) menyediakan mekanisme untuk membuat kueri parameterisasi yang tepat berdasarkan tipe asli yang disahkan. Berikut adalah contoh menambahkan bagian Tanggal ke kueri ado.net terhadap toko Server Sql, melakukan hal yang sama dengan string akan sangat rumit dan rapuh / rentan kesalahan.
command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});
Operasi
Tipe asli dalam kode juga menyediakan operasi standar seperti tipe .net System.Date
. Operasi biasanya bersifat matematis seperti menambahkan tanggal, menemukan perbedaan antara tanggal, dll. Sekali lagi, ini tidak mungkin dilakukan dengan mudah pada tipe string.
Lapisan presentasi
Lokal
Ketika tipe primitif akhirnya dikonversi ke string di lapisan presentasi ( lokasi yang benar dalam tumpukan program untuk melakukannya ) programmer sekarang memiliki berbagai opsi untuk menampilkannya dengan benar sesuai dengan konteks di mana ia disajikan. Konteks ini umumnya terdiri dari makna aktual data dan lokal pengguna.
Contoh 1
Contoh datetime dapat diformat secara otomatis berdasarkan lokal pengguna.
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
Contoh 2
Contoh desimal dapat mewakili jumlah (mata uang) dan lokal pengguna kemudian harus juga menampilkan jumlah sesuai dengan preferensi mereka. Aplikasi c # kemudian dapat menampilkan nilai menggunakan
amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))
Ini bisa menjadi kritis karena budaya yang berbeda menampilkan angka secara berbeda. Pada periode AS (.) Dan koma (,) memiliki makna terbalik yang tepat seperti di Belanda.
Lokasi
Ini sangat spesifik untuk DateTime
instance. Tanggal dan waktu merupakan kejadian pada saat tertentu dalam waktu tetapi ini biasanya harus disampaikan / disajikan kepada pengguna tergantung pada zona waktu mereka sendiri. Contoh: sebuah DateTime
instance 2016-09-21T23:38:21.399Z
dapat ditampilkan 9/21/2016 5:21 PM
untuk pengguna di Zona Waktu Timur di AS. Ada banyak cara untuk mencapai ini tetapi menjadi hampir mustahil jika instance waktu tanggal disimpan dalam memori sebagai tipe string atau dalam penyimpanan data sebagai tipe string.
Peraturan umum
2 aturan umum untuk sebuah aplikasi mengikuti ketika datang untuk mengkonversi tipe primitif apa pun ke representasi string adalah seperti ini
- Ketika menerima input, konversi input tersebut ke tipe primitif yang benar sedini mungkin dalam tumpukan program (biasanya di lapisan presentasi)
- Saat mengambil data untuk ditampilkan, konversikan data itu ke representasi string selambat mungkin dalam tumpukan program (sekali lagi, biasanya di lapisan presentasi)