Toplu doğrulama akışı, tek bir numarayı denetlemekten farklı bir iştir; çünkü hata tek başına gelmez ve tek bir satırın sorunu bütün listeyi etkileyebilir. Bu yazıda büyük listelerin hangi aşamalardan geçtiğini, sonuçların nasıl kovalandığını, raporun neden satır bilgisi taşımak zorunda olduğunu ve parçalama kararının nasıl verileceğini bulacaksınız.
Büyük bir liste doğrudan denetlenirse ne olur?
Doğrudan denetim, genellikle iki sorunla sonuçlanır ve bu sorunlar birbirini besler. Birincisi, ham verideki biçimlendirme farklarıdır. Aynı numara, listeye geldiği kaynağa göre tireli, boşluklu, parantezli veya farklı büyük küçük harfle yazılmış olabilir. Bunlar sadeleştirilmeden denetime girer ve çoğu haksız bir başarısızlık üretir.
İkincisi, tek bir kötü satırın bütün işi kilitlemesidir. Uzunluk hesabı beklenmeyen bir girdide hata verirse ve bu hata yakalanmazsa, toplu işlem o satırda durur. Binlerce doğru satır, tek bir bozuk satır yüzünden işlenmemiş kalır.
Bu iki sorunun ortak çözümü, işi aşamalara ayırmaktır. Her aşama kendi sözleşmesine sahip olur ve bir aşamanın sorunu sonraki aşamaya taşınmaz. Bu yaklaşımın listeyi küçük parçalara bölmekle birleşmesi, gerekçesi aşağıda ayrıca açıklanan bir karardır.
Temizle, denetle, raporla: üç aşamalı akış
İlk aşama temizlemedir ve bu aşamada hiçbir yargı üretilmez. Bütün satırlar aynı kurallarla sadeleştirilir: ayırıcılar atılır, görünmez karakterler budanır, harflerde büyük küçük ayrımı kaldırılır. Bu aşamanın çıktısı, her satır için sadeleştirilmiş bir değer ve boş olup olmadığı bilgisidir.
İkinci aşama denetlemedir. Sadeleştirilmiş değer üzerinde sırayla karakter kümesi, uzunluk ve varsa kontrol basamağı katmanları çalıştırılır. Bu aşama, satırlar arasında hiçbir karşılaştırma yapmaz; her satır kendi başına değerlendirilir.
Üçüncü aşama raporlamadır. Burada satırlar gruplara ayrılır, tekrarlar belirlenir ve sonuç kullanıcıya taşınır. Aşamaların ayrılmasının nedeni budur: aynı satırla ilgili iki farklı türde bilgi üretilir ve bunlar karıştırılmamalıdır.
Bu aşamaların tek bir numaradaki karşılığı numara doğrulama nasıl çalışır yazısında anlatılmıştır; toplu akış, aynı adımların bir liste üzerinde tekrarlanmasıdır.
Sonuçlar hangi kovalara ayrılır?
Tek bir liste, birbirinden farklı işler gerektiren birkaç grup üretir. Bu grupların ayrılması, raporun kullanılabilir olmasının ön koşuludur.
| Kova | Satırın durumu | Gereken iş |
|---|---|---|
| Doğrulandı | Bütün uygulanabilir katmanlar tuttu | Kayıt için işaretleme |
| Kontrol tutmadı | Biçim tuttu, kontrol basamağı tutmadı | Kaynağa dönüp değeri doğrulama |
| Biçim uyuşmadı | Uzunluk veya karakter kümesi uymadı | Aktarım ve okuma hatasını araştırma |
| Yalnızca biçim | Bu düzende kontrol basamağı yok | Biçimsel olarak kabul etme |
| Tanınmadı | Düzen bulunamadı veya değer boş | Kapsamı genişletme veya satırı ayırma |
| Tekrar | Aynı değer listede birden çok kez var | Yinelenenleri birleştirme |
Tablodaki ilk üç satır, en çok karıştırılan üçlüdür. “Kontrol tutmadı” ile “biçim uyuşmadı” farklı işler gerektirir: birincisi değerin kendisini sorgulamayı, ikincisi aktarım sürecini incelemeyi gerektirir. İkisini aynı kovaya koymak, düzeltme işini belirsizleştirir.
Dördüncü ve beşinci satır ise hata değildir. “Yalnızca biçim” sonucu, numaranın yalnızca biçiminin denetlenebildiğini söyler; “tanınmadı” sonucu, aracın bu düzeni bilmediğini söyler. Bu iki grubun hata listesine karışması, doğru kayıtların gereksiz yere işaretlenmesine yol açar.
Hata neden satır bilgisiyle raporlanmalı?
Çünkü toplu işte düzeltilecek şey tek tek satırlardır. Yalnızca “şu kadar satır hatalı” diyen bir rapor, hangi satırın düzeltileceğini söylemez ve kullanıcıyı listeyi elle taramaya bırakır.
Rapor bu yüzden üç bilgiyi birlikte taşımalıdır: satır numarası, okunan ham değer ve sadeleştirilmiş değer. Satır numarası kaynağa dönüşü sağlar; ham değer aktarım sorunlarını gösterir; sadeleştirilmiş değer ise denetimin gerçekte neyi gördüğünü açıklar. Üçü olmadan, aynı değer iki farklı satırda iki farklı sonuç aldığında neden farklı olduğu anlaşılamaz.
İkinci nokta, hata mesajının hangi katmanda oluştuğunu belirtmesidir. Karakter kümesinde takılan bir satır ile uzunlukta takılan bir satır, kullanıcı için farklı düzeltmeler gerektirir. Katman bilgisi taşınmayan bir mesaj, yanlış yeri düzeltmeye yöneltir.
Üçüncü nokta, raporun toplanabilir olmasıdır. Satır düzeyindeki sonuçlar, kovalara göre sayılabilmeli ve bu sayılar birbirini tutmalıdır. Kovaların toplamı, listenin satır sayısına eşit değilse, bazı satırların hiç değerlendirilmediği anlaşılır.
Tekrarlar ve boş satırlar nasıl ele alınır?
Tekrarlar, doğrulama sonucu değil liste özelliğidir; bu yüzden ayrı bir aşamada belirlenmelidir. Aynı numara listede birden çok kez geçebilir ve bu, numaranın kendisiyle ilgili bir sorun değildir.
Tekrar tespitinin normalleştirilmiş değer üzerinden yapılması şarttır. Aynı numara, bir satırda tireli ve başka bir satırda tiresiz yazılmışsa, ham değerler birbirinden farklı görünür ve tekrar bulunamaz. Sadeleştirmeden sonra yapılan karşılaştırma ise bu iki satırı aynı değer olarak tanır.
Boş satırlar için de benzer bir ayrım gerekir. Tamamen boş bir satır, geçersiz bir numara değildir; hiç numara içermeyen bir satırdır. Bu satırın hata sayılması, raporun gürültüsünü artırır ve gerçek hataların görünmesini zorlaştırır.
Her iki durumda da kural aynıdır: satırın kendi durumu ile listenin genel yapısı ayrı raporlanır.
Parçalama ve ölçek: sıralı mı paralel mi?
Liste büyüdükçe, denetimin tek seferde mi yoksa parçalara bölünerek mi yapılacağı sorusu ortaya çıkar. Bu karar, iki gereksinim arasındaki dengedir: hız ve hatanın yeri.
Parçalama, büyük listelerde ilerlemeyi görünür kılar ve bir parçadaki sorunun bütün işi durdurmasını engeller. Ayrıca bir parça yeniden denendiğinde yalnızca o parça işlenir. Buna karşılık parçalama, tekrar tespiti gibi liste geneline bakan işleri zorlaştırır; bu işler parçaların sonuçları birleştirildikten sonra yapılmalıdır.
İkinci konu, sıralamanın korunmasıdır. Paralel işleme kullanıldığında satırların işlenme sırası değişebilir. Raporun okunabilir olması için, satır numarası her sonuçla birlikte taşınmalı ve çıktı en sonunda kaynak sırasına göre düzenlenmelidir.
Üçüncü konu, tekrarlanabilirliktir. Aynı liste iki kez işlendiğinde aynı sonuçlar üretilmelidir. Bu, kural kayıtlarının işlem sırasında değişmemesini ve her sonucun hangi kural sürümüyle üretildiğinin kaydedilmesini gerektirir.
Geliştiriciler için: akışı kurarken dikkat edilecek noktalar
İlk nokta, aşamaların birbirinden bağımsız hata vermesidir. Temizleme aşaması hiçbir satır için hata üretmemelidir; yapamadığı şeyi bir sonraki aşamanın anlaması için işaretlemelidir. Denetim aşaması ise tek bir satırdaki sorun yüzünden toplu işi kesmemelidir.
İkinci nokta, boş ve tanınmayan satırların birbirinden ayrılmasıdır. Bu ikisi farklı işler gerektirir ve aynı kovada toplandığında rapor yanıltıcı olur.
Üçüncü nokta, çıktının satır sayısıyla tutarlı olmasıdır. Girdi listesindeki her satır, çıktıda tam olarak bir sonuç satırına karşılık gelmelidir. Eksik çıktı, sessizce atlanan satırlar olduğunu gösterir.
Dördüncü nokta, gerçek verinin maskelenmesidir. Bir toplu iş, gerçek numaraları içeren bir liste üzerinde çalışabilir; bu durumda ham değerlerin kayıtlara ve günlüklere yazılmaması gerekir. Rapor, satır numarası ve sonuç üzerinden konuşmalı, değerin kendisini saklamamalıdır.
Beşinci nokta, akışın dış servislerle konuştuğu durumdur. Bir düzenin kuralı yerel olarak bilinmiyorsa, akış dış bir kaynağa başvurabilir. Bu durumda zaman aşımı, yeniden deneme ve önbellek davranışı ayrıca tanımlanmalıdır; bunun ayrıntıları API sınırında doğrulama yazısında ele alınmıştır.
Sonraki adımlar
İlk adım, akışı temizleme, denetleme ve raporlama olarak üç aşamaya ayırmak ve her aşamanın çıktısını açıkça tanımlamaktır. İkinci adım, sonuçları kovalara ayırıp raporu satır numarası ve ham değerle birlikte üretmektir. Tek bir numaranın katmanları nasıl geçtiğini kendi gözünüzle görmek için numara doğrulama aracını açıp bir örnek deneyebilirsiniz; tek satırdaki katmanların anlamı numara doğrulama nasıl çalışır yazısında, akışın dış servise bağlandığı durumlar ise API sınırında doğrulama yazısında ayrıntılandırılmıştır.
Bu yazıdaki toplu listeler, satır sayıları ve sonuç kovaları yalnızca akışı göstermek için kurgulanmıştır; gerçek kişilere veya kurumlara ait veri içermez. Gerçek listelerle çalışırken ham değerlerin paylaşılmadan önce maskelenmesi gerekir.