Validation ve Yöntemleri


Validation bir yazılımın logic akışını azaltan en önemli faktörlerden biridir. Validation doğru kurgulanmadığı durumlarda size yardımcı olmak yerine işinizi uzatabilir, bu yüzden validation en önemli konular arasında gelir. 


Validation yani doğrulama işlemi yazılım sürecinde önemli etkenlerden biridir. Hatta duruma göre başta gelen mühim bir konu da diyebilirim. Verileri doğrulamadan yapılan işlemlerde sistem ciddi bir soruna girebileceği gibi integration yani tutarlılıkda dağılabilir. Bu yüzden verileri doğrulamak çok mühim bir konudur. Ayrıca veri doğrulama işlemi verinin doğru olmadığında işlemleri yönlendireceği için business logic kısmına girmeden işi başında halleder.

Veri doğrulama web sitelerinde iki aşamada oluşur, istemci taraflı doğrulama ve sunucu taraflı doğrulama.


İstemci Taraflı Doğrulama

İstemci taraflı doğrulama adından da anlaşılacağı gibi browser üzerinde ki doğrulama metodlarını kapsar. İstemci taraflı doğrulama için açıkçası işiniz biraz daha kolaydır. Bunun için hem HTML5 in kendi doğrulama metodlarını kullanabilirsiniz hem de ekstra js kütüphanelerini.

HTML5 ile doğrulama

Aslında bu işlem için herhangi bir şey yapmanıza gerek yok. Tabi inputların tipini ve max, min, maxlength, minlength gibi değerlerini dolduruyorsanız. Yani bir inputu doğru tasvir etmişseniz browseriniz sizin için kuralları verecektir. Tabi bazı ekstralar yok değil. Eğer alan dolu olmalı ise required attribute'unu kullanmanız gerekecektir. Daha fazla detay için https://www.w3schools.com/tags/tag_input.asp adresinden faydalanabilirsiniz.

Ayrıca bazen klasik şeyler yeterli gelmez örneğin TC Kimlik numarası gibi. 11 haneli bir metin, dikkatinizi çekiyorum bir sayı değil rakamlardan oluşan bir metin. Eğer onu bir sayı olarak tanıtırsanız muhtemelen input un sağına birer birer artırabileceğiniz bir indicator koyacaktır, bunu istemeyiz. Peki ne yapmalıyız. Tabi ki pattern kullanmalıyız, pattern attribute içerisine regex ile pattern vermeniz mümkün. Böylece özel kurallar da oluşturabilirsiniz.

JS ile doğrulama

En sevdiğim yöntem bu. Çünkü bu yöntem ile lezzetli mesajlar vermeniz mümkün. Aşırı özelleştirmeye açık olan bu yöntemi kullanmanız gerekebilir. Hatta bazen şöyle olabilir ki; ya tc kimlik girsin ya da pasaport! Nasıl HTML5 ile validation yapabilirsiniz ki?

Bu işlem için aslında hazır bir validation kütüphanesi kullanmanızı tavsiye ederim. Bu bir çoğu kodu yazmaktan sizi kurtaracaktır (workcube olarak vanilla.js tercih etmekteyiz ;).


Sunucu Taraflı Doğrulama

Sunucu taraflı doğrulama istemcide doğrulama mekanizmasının kapatılması (sehven veya kasten) durumunda doğrulamanın çalıştığından emin olmak için kullanılır. Genellikle kullanılan alt yapıya göre kütüphaneler bulmak mümkündür. Veriler logic katmana girmeden önce doğrulanmalıdır. Eğer doğrulama başarısız ise ya kullanıcıya dönülmeli yada varsayılan değerler ile ilerlenmelidir.

Doğrulama Teknikleri

İki türlü doğrulama vardır. İlki bir verinin birden fazla kurala tabi olması (classic validation) ikincisi ise bir akım içerisinde ilk hatalı kuralı bulmaya yöneliktir (fluent validation). Client tabanlı kurallarda genellikle klasik doğrulama yapılarak iş yükünü browsere bırakmak mantıklı olur. Hataların tamamı görüntülenmelidir. Ancak sunucu taraflı doğrulamada fluent validation mantıklı bir tercihtir. Çünkü sunucu ilk hatayı keşfettiğinde kullanıcıya dönmeli daha fazla merkezi işlemciyi yormamalıdır.

Örnek;

if (len(attributes.tckimlik) neq 11) {
arrayAppend(errors,"Tckimlik 11 haneli olmalı");
}
if (reFind("^[0-9]$", attributes.tckimlik) eq 0) {
arrayAppend(errors, "Tckimlik rakamlardan oluşmalıdır");
}

Yukarıda klasik bir validation ile hataları bulmuş olduk. Görüldüğü gibi tüm hatalar hesaplanıp error dizinine aktarılarak kullanıcıya dönülüyor. Bu yaklaşım daha çok işlemci harcatır. Hele ki tc kimliğin 11 hane olmaması halinde birde sorguya sokulup bu kayıt varmı diye bakmanız gerekiyor ise işte size güzel bir bomba!

if (len(attributes.tckimlik) neq 11) {
errors = "Tckimlik 11 haneli olmalı";
} else if (reFind("^[0-9]+$", attributes.tckimlik) eq 0) {
errors = Tckimlik rakamlardan oluşmalıdır";
}

Burada errors dizi değil değişken yani ilk hatayı bulduğunda else if ler çalışmayacak ve kullanıcıya ilk hatayı dönecektir.

Karmaşık doğrulama işlemlerini browser taraflı çözmek için https://validatejs.org/ adresinde ki validate.js kütüphanesini kullanarak çözebilirsiniz. Sitede ki örnekleri görünce başınıza gelebilecek kuralları daha iyi anlayacaksınız. Coldfusion için henüz stable bir validation kütüphanesi bulunmamakta bu yüzden elle yazmanız gerekecektir. Ancak validation kodlarınızı fonksiyonel yazarsanız en azından command pattern e göre işlem yapabilirsiniz.

if (validator.notValid(rangeLenValidator, attributes.tckimlik, 11, 11)) {
errors = "TC kimlik 11 haneli olmalı";
} else if (validator.notValid(regexValidator, attributes.tckimlik, "^[0-9]+$")) {
errors = "TC kimlik rakamlardan oluşmalıdır";
}

böylece karşılaştığınız kurallara göre de validatorleri tekrar kullanmanız mümkün olur.


Geri Bildirim

Bu içeriği faydalı buldunuz mu?