Programlamada Tasarım Desenleri #7 — Proxy Design Pattern (Proxy Tasarım Deseni) (C# .NET)

Merhaba sevgili yazılım meraklıları! 👨‍💻👩‍💻 Yazılım dünyasında karşımıza çıkan en güçlü araçlardan biri de “Tasarım Desenleri”dir. Bu yazı dizisinin yedinci bölümünde, sıkça kullanılan ve özellikle yazılımın yapısal boyutunu güçlendiren bir desen olan Proxy Design Pattern yani Temsilci Tasarım Desenini (Proxy Pattern) detaylıca inceleyeceğiz.

Hazırsanız, hem teorik bilgileri hem de C# .NET ile uygulamalı örnekleriyle Proxy desenine derinlemesine bakalım 🚀

Programmer Desk with Proxy Pattern

Proxy Design Pattern Nedir?

Proxy Design Pattern, bir nesneye doğrudan erişim yerine, bu nesneye bir “ara nesne” üzerinden erişilmesini sağlar. Bu sayede asıl nesnenin erişimini kontrol altına alabilir, kullanım öncesi/sonrası ek işlemler yapabilir ya da pahalı operasyonları gecikmeli (lazy) gerçekleştirebiliriz.

Ne Zaman Kullanılır?

  • Gerçek nesneye doğrudan erişimin güvenli olmadığı durumlarda
  • Büyük ve pahalı nesneleri gerektiğinde yaratmak için (örneğin büyük bir veri kaynağı)
  • Uzaktaki nesnelerle iletişim kurarken (Remote Proxy)
  • Nakit kontrolü, loglama, performans takibi gibi ek işlemler gerektiğinde

Proxy Pattern Türleri

1. Virtual Proxy (Sanal Proxy): Gerçek nesne pahalıysa ve hemen oluşturulması gerekmiyorsa kullanılır. Nesneye gerçekten ihtiyaç olmadan yaratılmaz.

2. Protection Proxy (Koruma Proxy): Erişim kontrolü sağlar. Örn: Kullanıcının yetkisi olup olmadığını kontrol eder.

3. Remote Proxy (Uzak Proxy): Farklı makina veya süreçte olan nesnelerle iletişim sağlamak için.

4. Smart Proxy (Akıllı Proxy): Erişim öncesi veya sonrası işlem yapılmasını sağlar. Örn: loglama, sayma vs.

C# (.NET) İle Proxy Design Pattern Uygulaması

Örnek senaryo üzerinden ilerleyelim: Bir video indirici sistemimiz var. Fakat videolar büyük olduğu için her zaman indirmek istemiyoruz. Bunun yerine sadece gerektiğinde indirme yapacak bir “Proxy” sınıfı oluşturacağız.

1. Ortak Arayüz Tanımı

public interface IVideoDownloader
{
    void Download(string videoUrl);
}

2. Gerçek Nesne (Real Object)

public class RealVideoDownloader : IVideoDownloader
{
    public void Download(string videoUrl)
    {
        Console.WriteLine($"Video indiriliyor: {videoUrl}");
        // Simüle edilen zaman alıcı işlem
        System.Threading.Thread.Sleep(2000);
        Console.WriteLine("İndirme tamamlandı!");
    }
}

3. Proxy Sınıfı

public class ProxyVideoDownloader : IVideoDownloader
{
    private RealVideoDownloader _realDownloader;
    private List _downloadHistory = new List();

    public void Download(string videoUrl)
    {
        Console.WriteLine($"Proxy üzerinden istek geldi: {videoUrl}");

        if (_downloadHistory.Contains(videoUrl))
        {
            Console.WriteLine("Bu video daha önce indirildi. Tekrar indirme yapılmayacak.");
        }
        else
        {
            _realDownloader = new RealVideoDownloader();
            _realDownloader.Download(videoUrl);
            _downloadHistory.Add(videoUrl);
        }
    }
}

4. Kullanım Örneği

class Program
{
    static void Main(string[] args)
    {
        IVideoDownloader downloader = new ProxyVideoDownloader();

        downloader.Download("https://youtube.com/video1");
        downloader.Download("https://youtube.com/video2");
        downloader.Download("https://youtube.com/video1"); // İkinci kez aynı video
    }
}

Ekran Çıktısı (Screenshot)

Aşağıda Proxy sınıfının nasıl çalıştığını gösteren beklenen çıktı yer alıyor:

Proxy üzerinden istek geldi: https://youtube.com/video1
Video indiriliyor: https://youtube.com/video1
İndirme tamamlandı!

Proxy üzerinden istek geldi: https://youtube.com/video2
Video indiriliyor: https://youtube.com/video2
İndirme tamamlandı!

Proxy üzerinden istek geldi: https://youtube.com/video1
Bu video daha önce indirildi. Tekrar indirme yapılmayacak.

Proxy Design Pattern’in Avantajları

  • ✅ Performans artışı (Lazy initialization ve tekrar eden işlemleri önleme)
  • ✅ Güvenlik katmanı (Erişim izinleri kontrolü)
  • ✅ Gerçek nesneye olan bağımlılığı azaltma
  • ✅ Yönetimi daha kolay ve merkezi hale getirme

Dezavantajları

  • ⚠️ Karmaşık sistemlerde yönetimi zorlaşabilir
  • ⚠️ Fazladan sınıf ve katman eklemek kod bakımını zorlaştırabilir

Gerçek Hayattan Proxy Kullanım Örnekleri

  • HTTP Proxy Sunucuları
  • ORM Sistemleri (Entity Framework Lazy Loading)
  • Akıllı Caching Mekanizmaları
  • Uzaktan erişim (Web servisi çağrısı)

SEO Uyumlu Etiketler (Tags)

  • proxy tasarım deseni c#
  • proxy design pattern .net
  • c# proxy pattern örneği
  • design patterns .NET proxy
  • yazılım tasarım desenleri

Sonuç

Proxy Design Pattern, nesneye erişimi kontrol etmek, performansı yükseltmek ve uygulamayı daha esnek hale getirmek için mükemmel bir çözümdür. Özellikle büyük sistemlerde, güvenlik ve hızlı yanıt konularında ciddi faydalar sağlayabilir.

Bu yazımızda C# ile Proxy Design Pattern’i hem teori hem de uygulamalı örnekle öğrendik. Serinin diğer yazılarını da okumayı unutmayın!

📢 Siz de Proxy Pattern kullandığınız örnekleri yorumlarda paylaşabilirsiniz!

Devamını kaçırmamak için bizi takip etmeyi unutmayın!

🔔 Yeni yazılar için abone olun

📩 Sorularınızı yorum kısmından veya iletişim sayfamızdan gönderebilirsiniz

DİĞER YAZILAR

Görseller ve Ek Kaynaklar:

Proxy Pattern Flowchart
Proxy Communication Illustration
Proxy Comparison Diagram
Programming Workspace Video Downloader

📚 Kaynaklar:

📝 Bu yazı TasarımdanKodlama.com ekibi tarafından hazırlanmıştır. Kaynak göstererek paylaşabilirsiniz. 🙏

#csharp #dotnet #tasarımdesenleri #proxypattern #softwaredesign #designpatterns

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir