C# Proxy Design Pattern(Proxy Tasarım Deseni)

Veysel Güneş
3 min readOct 25, 2019

Merhaba Arkadaşlar,

Bugün Öğrendiklerimi yazıyorum serisinde Tasarım desenlerinden olan procy tasarımdan bahsedeceğiz,

Oluşturduğumuz tasarımda bazı sınıfların, nesnelerin yahut işleyişlerin sorumluluk ve süreçteki işlevsel hallerini bir başka nesne üzerinde kontrol edebilir ve sorumluluğu bu nesneye yükleyebiliriz. Daha net bir ifadeyle, nesnelerin süreçteki vekaletini başka bir sınıfa devredebiliriz. İşte bu yazımızda da bu bahsettiğim algoritmanın deseninden yani Proxy Design Pattern’den bahsediyor olacağız.

Bu tarz bir uygulamayı tasarım desenini bilmeden de hemen hemen çoğumuzun gerçekleştirmiş olması muhtemeldir. Eee, hepimiz bir çok Design Pattern’i farkında olmaksızın önceden kullandığımızı sonradan desenleri öğrenirken görmüşüzdür. D.P. yapıları, belirli durumlarda tekrarlanan ve kalıp olarak ihtiyaç duyulan noktada uygulanabilen manevralardan ibarettir ve tek bir dile bağımlılığı yoktur. Ondandır ki tasarım deseni dediğimiz olgu, “Aklın yolu birdir” sözünü oldukça doğrulamaktadır.

Şimdi Proxy tasarımını incelemeye başlayalım.

Proxy D.P. Client tarafından erişilecek nesneye vekalet eden bir tasarım desenidir. Burada vekaletten kasıt ilgili nesneyi kontrol edecek bir Proxy nesnesinin kullanılmasıdır.

Üç farklı durumda Proxy D.P. kullanılır.

  1. Remote(Uzak) Proxy
    Remote(uzak) bir nesne kullanılacağı durumlarda kullanılabilir. Uzaktaki nesneye local bir temsilci sağlar ve gerekli kontrolleri yapmamıza olanak tanır.
  2. Virtual Proxy
    Üretimi yahut kullanımı maliyetli nesnelerin oluşturulması veya kullanılması için tercih edilir. Buna örnek olarak genelde herkesin dillendirdiği resim yükleme işlevini verebiliriz. Yüksek boyutlu bir resmin boyutundan dolayı geç yüklenmesi durumunda verilen -yükleniyor- mesajı ve ardından yükleme işlemi bittiği anda resmin gösterilmesinde kullanılabilir.
  3. Protection Proxy
    Yetkilendirme yahut login durumlarında kullanılabilir.

Proxy desenini uygularken bu üç duruma genel olarak aşağıdaki terminolojiyle hareket edilecektir.

  • Client
    İstemcidir.
  • Subject
    İstemcinin tek bir tip ile çalışmasını sağlayacak olan Interface yahut abstract class’ımızdır. Real Subject ve Proxy nesnelerimizin türediği yapıdır.
  • Real Subject
    O anki işin asıl çalışmasını gerçekleştirecek olan gerçek nesnemizdir.
  • Proxy
    Vekil sınıfımızdır. İçerisinde Real Subject referansını taşıyarak istemcinin isteklerine cevap verecektir. Doğal olarak istemci gerçek nesneye dolaylı yoldan Proxy üzerinden erişebilecektir.

Şimdi Proxyi biraz daha iyi anlamak için bir örnek verelim

Örnek

Çevrim içi bir yemek sipariş sitesinin tasarımından ve çalışmasından sorumlu olan Kamil, mail adresine girdiğinde proje liderinden bir mail geldiğini görür. Mailde, sipariş ve ödeme işlemini gerçekleştiren sunucunun değiştirileceği ve bu işlemlerin artık yeni bir sunucuya taşınması gerektiği yazmaktadır. Ardından Kamil iki gün boyunca Çalışmış ve bu eylemler için yeni bir sunucu oluşturmuştur. Test aşamasında ise yeni sunucunun siparişi alabildiği ancak ödeme işlemini yerine getiremediğini görmüştür. Bunun ardından günü kurtarmak adına sipariş işlemini yeni sunucudan,
ödeme işlemini ise eski sunucudan yapmaya karar vermiştir.

1-İnterface ISubject kısmı

ISubject kısmı

2-Proxy Kısmı

Proxy Kısmı

3-Real Subject Kısmı

Real Subject

4-Clint Test Ortamı

Son olarak ta proxy tasarım desenin çıktısı görelim

Ekran çıktısı

Ve UML sınıf diyagramında görelim

Sabırla okuduğunuz için teşekkür ederim

--

--

Veysel Güneş

Studying software engineering at firat university, Blogger Öğrendiklerini yazmaktan ve ortaya bir ürün koymaktan mutlu olan http://veyselgunes.site/