Doğrulama en kısa sürede yapılmalıdır.
Herhangi bir bağlamda doğrulama, biz Etki Alanı modeli ya da herhangi bir yazılım yazma yöntemi, doğrulamak istediğiniz Neyi ve şu anda hangi seviyede olduğunuzu amacına hizmet etmelidir.
Sorunuza dayanarak, cevabı doğrulamayı bölmek olacağını tahmin ediyorum.
Malın validasyonu, o malın değerinin doğru olup olmadığını, örneğin 1-10 arasında bir aralık beklendiğinde kontrol eder.
Nesne doğrulama, nesne üzerindeki tüm özelliklerin birbiriyle bağlantılı olarak geçerli olduğunu garanti eder. örneğin, BeginDate, EndDate'den önce. Veri deposundan bir değer okuduğunuzu ve hem BeginDate hem de EndDate'in DateTime.Min'e varsayılan olarak başlatıldığını varsayalım. BeginDate'i ayarlarken, "EndDate'den önce olmalı" kuralını uygulamak için hiçbir sebep yoktur, çünkü bu YET'i uygulamaz. Tüm özellikler ayarlandıktan SONRA bu kural kontrol edilmelidir. Bu toplam kök düzeyinde çağrılabilir
Doğrulama ayrıca toplu (veya toplam kök) varlık üzerinde önceden yapılmalıdır. Bir Order nesnesi geçerli veriler içerebilir ve bu yüzden de OrderLines. Ancak bir iş kuralı, hiçbir emrin 1.000 $ 'dan fazla olamayacağını belirtir. IS'nin izin verdiği bazı durumlarda bu kuralı nasıl uygularsınız. Bu yalnızca "kötüye kullanım" özelliğini ekleyemezsiniz, çünkü bu kötüye kullanıma yol açacaktır (er ya da geç, belki de sadece, bu "iğrenç isteği" ortadan kaldırmak için).
daha sonra sunum katmanında doğrulama var. Gerçekten başarısız olacağını bilerek, nesneyi ağ üzerinden gönderecek misiniz? Yoksa kullanıcıyı bu cenaze töreninden kurtarır ve geçersiz bir değer girer girmez onu bilgilendirirsiniz. Örneğin, DEV ortamınız çoğu zaman üretime göre daha yavaş olacaktır. “Patronunuz boynunuzu soluyorken sabitlenecek bir üretim hatası olduğunda,“ bu alanı henüz başka bir test sırasında TEKRARLA unuttunuz ”hakkında bilgilendirilmeden önce 30 saniye beklemek ister misiniz?
Kalıcılık seviyesindeki doğrulama, özellik değer doğrulamasına mümkün olduğu kadar yakın olmalıdır. Bu, herhangi bir tür veya düz eski veri okuyucunun eşleyicilerini kullanırken "boş" veya "geçersiz değer" hataları okuma istisnalarının önlenmesine yardımcı olacaktır. Saklı yordamlar kullanmak bu sorunu çözer, ancak aynı değerleme mantığını AGAIN yazıp AGAIN yürütmek gerekir. Ve saklı yordamlar DB yönetici alanıdır, bu nedenle HIS işini de yapmayı denemeyin (ya da daha da kötüsü para kazanmadığı bu “nitty picking” ile uğraşmayın.
Bu yüzden bazı "meşhur" sözleriyle söylemek gerekirse, ama artık en azından artık neye bağlı olduğunu biliyorsunuz.
Keşke bütün bunları tek bir yere koyabilseydim ama maalesef bu yapılamaz. Bunu yapmak, TÜM katmanlar için TÜM doğrulama içeren bir "Tanrı nesnesine" bağımlılık getirir. O karanlık yolda ilerlemek istemezsin.
Bu nedenle, doğrulama istisnalarına sadece özellik seviyesi atıyorum. Diğer tüm seviyeler ValidaResult'u IsValid yöntemiyle kullanıp tüm "bozuk kuralları" toplarım ve bunları kullanıcıya tek bir AggregateException'da iletirim.
Çağrı yığınını çoğaltırken, sunum katmanına ulaşana kadar bunları tekrar AggregateExceptions içinde toplarım. Hizmet katmanı, WCF durumunda bir FaultException olması durumunda bu istisnayı doğrudan müşteriye atabilir.
Bu, istisnayı benim almamı ve her giriş kontrolünde bireysel hatalar göstermesini ya da düzleştirip tek bir listede göstermesini ya bölmemi sağlıyor. Seçim senin.
bu yüzden sunumun doğrulanmasından bahsettim, mümkün olduğunca kısa devre yapmak için.
Ayrıca neden onaylama seviyesini toplama seviyesine getirdiğimi merak ediyorsanız (ya da isterseniz hizmet seviyesi), bunun nedeni, gelecekte hizmetlerimi kimlerin kullanacağını söyleyen bir kristal topum olmamasıdır. Geçersiz verileri girerek başkalarının sizinkileri yanlış yapmalarını önlemek için kendi hatalarınızı bulma konusunda yeterince sorun yaşayacaksınız. A uygulamasını yönetirken, ancak B uygulaması hizmetinizi kullanarak bazı verileri besler. Tahmin et, bir böcek olduğunda önce kime sorarlar? B uygulamasının yöneticisi kullanıcıyı "benim açımdan bir hata yok, sadece veriyi besliyorum" şeklinde bilgilendirecektir.