Türler bir sebepten dolayı varlar, eğer fayda sağlamazlarsa, o zaman onlara sahip olamazdık ve kullanmayacağız ve sadece "tip" olacaktı ve her şey böyle olacaktı. Sadece uygun değil aynı zamanda güvenlik ve verimlilik de sağlarlar. Aşağıda, türleri her zaman yerel biçiminde , dize olarak değil de sürdürmeniz gerektiğinin bir listesi verilmiştir . DateTime
Çoğu zaman örnek olarak kullandım ancak aynı ilkeler tamsayılar, ondalık sayılar, ikili vb. Gibi ilkel türler için de geçerli.
Bilgi deposu
Kısıtlamalar
Türü Kısıtlaması
Neredeyse tüm veri depoları veri üzerindeki kısıtlamaları belirlemeye izin verir, buna tip kısıtlamaları da dahildir. Bir DateTime
örnek belirtmenin temel yararlarından biri , depolanan verilerin bu türle sınırlı olacağıdır. Verinin depoya nasıl yerleştirildiğine bakılmaksızın, bir tarih saatinden başka bir şey girmek asla mümkün olmayacaktır. Sonuncusu, doğrudan mağaza ile etkileşime giren çoklu işlemlerin olduğu daha büyük sistemler için önemlidir. Ayrıca, Şubat ayının 30 yıl gibi hatalı tarihlerini eklemeyi de içerir (herhangi bir yılın), Şubat ayının sadece artık yılda 29 gün, artık olmayan yıllarda 28 gün olabilir.
Doğrulama Kısıtlamaları
Girilen bir tarihin geçerli tarihi geçmemesini veya bir başlangıç tarihinin bitiş tarihinden önce gerçekleşmesini sağlamak gibi Veri Deposunda uygulanabilecek doğrulama kısıtlamaları da vardır.
Operasyonlar
Çoğu veri deposunda ayrıca MS Sql Server gibi DateAdd
veya DatePart
içerisinde yerleşik işlemler / işlevler vardır . Bu, veriler hala depodayken (uygulamaya henüz alınmamış) filtreleme veya belirli verileri seçmenize olanak sağlar.
Evrensel Kabul Edilen Format
Yerel tip kullanılarak, aynı zamanda mağaza ile de etkileşime giren diğer geliştiricilerin veya sistemlerin, bu ilkel tipin nasıl depolandığına dair dakika ayrıntıları konusunda bilgilendirilmeleri gerekmez. Bu tip bir dizge olarak kaydedildiyse durum bu değildir, o zaman herkesin o DateTime
dizge gösteriminin biçimini anladığından emin olmalısınız . Bu sistem, veri kaynağındaki yerleri, bölgeleri ve kültürleri, uygulamanın fiziksel konumunu ve bu verilerle etkileşime giren son kullanıcının / sistemin özniteliklerini kapsayan verilerle uğraşırken kırılgan hale gelir. Örnek: Bir ülkedeki tarih formatı MM / gg / yyyy (ABD'de olduğu gibi) olabilir, ancak bir diğerinde gd / MM / yyyy olabilir, bu farkın neredeyse imkansız hale geldiğini tespit etmek mümkündür.
hız
Alma hızı, doğrulama hızı, işlemlerin hızı ve depolama verimliliği de aynı zamanda önemli faktörlerdir. Alma hızına örnek: veri depoları sütunlarda indekslere izin verir ve bu indeksler, tür kendi formatında saklanırsa genellikle daha verimli kullanılabilir.
Uygulama
Veri erişimi
Sorguların mağazaya karşı yürütülmesi, yerel tip sistemi geliştiriciler olarak kullanarak daha basit hale gelir, bir kez daha depolama formatı hakkında tahmin yapmak zorunda kalmazsınız. Hemen hemen tüm veri deposu uygulama sağlayıcıları ( örnek: ado.net ), içeri aktarılan yerel türlere göre uygun parametreli sorgu oluşturmak için mekanizmalar sağlar. Aynı dizeleri ile yapmak çok hantal ve kırılgan / hata eğilimli olacaktır.
command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});
Operasyonlar
Koddaki yerel türler ayrıca .net türü gibi standart işlemler sağlar System.Date
. İşlemler genellikle tarih ekleme, tarihler arasındaki farkı bulma vb. Gibi nitelikte matematikseldir. Yine de, bu dize türlerinde kolayca yapılması mümkün değildir.
Sunum katmanı
yerel
İlkel bir tür nihayet sunum katmanındaki bir dizgeye dönüştürüldüğünde ( bunu yapmak için program yığındaki doğru yer ) programcı şimdi sunulduğu içeriğe göre doğru göstermesi için çeşitli seçeneklere sahiptir. Bu bağlam genellikle verilerin gerçek anlamını ve kullanıcının yerel ayarını içerir.
örnek 1
Bir datetime örneği, kullanıcının yerel ayarına göre otomatik olarak biçimlendirilebilir.
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
Örnek 2
Ondalık bir örnek bir miktarı (para birimini) temsil ediyor olabilir ve kullanıcının yerel ayarı daha sonra miktarı tercihlerine göre görüntülemelidir. Bir c # uygulaması kullanarak değeri görüntüleyebilir
amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))
Farklı kültürler sayıları farklı gösterdiği için bu kritik olabilir. ABD döneminde (.) Ve virgül (,), Hollanda'da olduğu gibi tam tersi anlama sahiptir.
yer
Bu, DateTime
örneklere çok özeldir . Bir tarih ve saat, belirli bir zamanda meydana gelen bir oluşumu temsil eder, ancak bu genellikle kendi zaman dilimine bağlı olarak kullanıcıya iletilmeli / sunulmalıdır. Örnek: ABD'deki Doğu Timezone'daki bir kullanıcı için bir DateTime
örnek 2016-09-21T23:38:21.399Z
görüntülenebilir 9/21/2016 5:21 PM
. Bunu başarmanın birçok yolu vardır, ancak tarih saatinin bir dize türü olarak bellekte veya bir dize türü olarak veri deposunda tutulması imkansız hale gelir.
Genel kural
Herhangi bir ilkel türün bir dize temsiline dönüştürülmesi söz konusu olduğunda, bir uygulamanın genel 2 kuralları şöyledir:
- Girdi kabul edilirken, bu girdiyi program yığında olabildiğince erken doğru ilkel türe dönüştürün (genellikle sunum katmanında)
- Görüntülenecek verileri alırken, bu verileri program yığınında olabildiğince geç dize olarak gösterime dönüştürün (yine, genellikle sunum katmanında)