Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Intercepting Filter Pattern(Filtreleme Tasarım Deseni)

Merhaba,

Bu içeriğimizde, kullanıcıdan gelen isteği(request) işleme almadan önce filtreleyip süzgeçten geçirmemizi sağlayan ya da istek neticesinde kullanıcıya döndürülecek cevabı(response) modifiye ederek o şekilde döndürmemize imkan tanıyacak olan Intercepting Filter Pattern‘ı inceliyor olacağız.

Intercepting Filter Pattern Nedir?
Bu pattern’ı izah edebilmek için direkt olarak şöyle bir örnek üzerinden misal verebiliriz; Bir uygulamada(web, masaüstü, console, mobile vs.) kullanıcıdan gelen istek üzerine işlem yapmadan önce kullanıcının oturum açıp açmadığını kontrol etmek ve session bilgileri bulunmadığı taktirde kullanıcıya isteğin başarısız olduğunu bildirip login sayfasına yönlendirmek isteyebiliriz. Ayriyetten oturum açmışsa eğer gerekli validation kurallarını kontrol etmek ve isteği ancak bu şekilde başarılı kılmak isteyebiliriz. Bunun yanında kullanıcıya bir cevap dönerken bu cevap üzerinde de farklı modifikasyonlar gerçekleştirip o şekilde cevabı dönmek isteyebiliriz. İşte bu ve bunun gibi istek süreçlerinin basamaklı bir şekilde bölümleme gereksinimi duyulan çalışmalarda, tasarımsal açıdan Intercepting Filter Pattern‘ı uygulayarak daha pratik ve stratejik çözümler getirebiliriz.

Intercepting Filter Pattern’ın Mantığı Nedir?
Intercepting Filter Pattern’da merkezi olarak filtre görevi gören sınıflar bulunmaktadır. Bu sınıflar sıralı bir şekilde tetiklenerek işlevsellik göstermektedirler.

Bu mekanizmaya ‘Filter Chaining’ denmektedir.

Yukarıdaki görsel şemayı incelersek eğer her bir filtre kendi görevini yerine getirdikten sonra kontrolü kendinden sonraki filtreye bırakmaktadır. Bu süreci de yazımızın devamında ilgili pattern’ı stratejik olarak incelerken göreceğimiz üzere ‘Filter Manager‘ isimli sınıf yürütmektedir.

Filtrelerin işlevleri sırasında herhangi bir filtrede hatalı bir durum meydana gelir yahut tespit edilirse kendinden sonraki gelen filtreler devreye girmeden işlem durdurulur ve kullanıcıya duruma dair gerekli bildiride bulunulur.

Intercepting Filter Pattern, istekleri karşılayacak ve handle edecek olan temel kod üzerinde, değişikliklere ve modifikasyonlara gerek kalmaksızın ortak hizmetleri standart bir şekilde işlemek amacıyla takılabilir filtreler oluşturmamızı sağlayan bir modeldir. Bu filtreler mevcut kodu değiştirmeksizin uygulamaya eklenerek devreye sokulabilir yahut çıkarılarak nitelikleri pasifize edilebilir.

Intercepting Filter Pattern’ın Uygulanması
Intercepting Filter Pattern’ını uygulayabilmek için yandaki şemada olduğu gibi ‘Filter Manager’, ‘Filter Chain’, ‘Filters’ ve ‘Target’ aktörlerinin kurguda yer alması gerekmektedir.

Bu aktörlerin kısaca ne olduğuna değinmemiz gerekirse eğer;

 

Pratik Örnek
Şimdi, Intercepting Filter Pattern stratejisini yukarıdaki ilk görselde verilen mantığa uygun bir senaryo üzerinden örneklendirelim. Senaryomuz; client’tan personel(EmployeeService) ve müşteri(CustomerService) bilgileri için gelen istek süreçlerinde, öncelikle kullanıcı kimlik doğrulama kontrolü(AuthenticationFilter) ve ardından validasyon kontrolü(ValidationFilter) yapılarak her iki durumun doğrulanması neticesinde istekle ilgili sonucun üretilip döndürülmesini, aksi taktirde herhangi bir filtrede oluşan aykırı duruma binaen kullanıcıyı uyararak isteğin hedef servise erişemeden iptal edilmesini gerçekleştirelim.

Intercepting Filter Pattern’in Faydaları Nelerdir?

Ayrıca unutulmamalıdır ki, gereksiz yere uzun işlev yapan filtreler client’tan gelen isteğin yaşam döngüsünün süresini uzatacağından dolayı performans açısından zarara uğratabilir.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Mobil sürümden çık