Programlamada Tasarım Desenleri #10 — Composite Design Pattern (C#.NET ile)

Programlamada tasarım desenleri (design patterns), yazılım geliştirmede karşımıza çıkan tekrar eden sorunlara profesyonelce çözüm üreten araçlardır. Bu yazımızda, özellikle nesne yönelimli programlama (OOP) dünyasında çok önemli bir yere sahip olan Composite Design Pattern (Bileşik Tasarım Deseni) konusunu, .NET C# dili ile detaylıca ele alacağız.

Eğer siz de hiyerarşik yapıda nesnelerle (örneğin dosya sistemleri, UI bileşenleri, şirket organizasyon yapıları) çalışıyorsanız, Composite Pattern tam size göre!

Composite Design Pattern Nedir?

Composite (Bileşik) Tasarım Deseni, yapı olarak birbirinin yerine kullanılabilecek nesneleri ve bu nesnelerin grubunu aynı şekilde işlemenizi sağlayan bir yapıdır.

📌 Basit bir tanımla:

Parça-bütün (part-whole) hiyerarşisini oluştururken, kullanıcıların hem nesneleri bireysel olarak hem de grup halinde aynı şekilde işlemesine imkân tanır.

Ne zaman kullanılır?

  • Hiyerarşik bir yapıda nesnelerle çalışmanız gerekiyorsa,
  • Nesneleri ağaç yapısında temsil etmek istiyorsanız,
  • Aynı operasyonları hem tekil hem de bileşik nesnelere uygulamak istiyorsanız,

Composite Design Pattern tercih edilebilir.

Gerçek Hayattan Örnek 📚

Bir organizasyon yapısını düşünün. Bu yapıda her çalışan bir “Employee” türündedir. Ancak bazı çalışanlar (yöneticiler), başka çalışanları yönetebilir. Yani, hem “Employee” hem de bir “grup yöneticisi” olabilir.

Composite Pattern, bu tür iç içe geçmiş yapıları modellemekte oldukça kullanışlıdır.

UML Diyagramı

Aşağıda Composite Pattern’in genel UML diyagramını bulabilirsiniz:

Composite Design Pattern UML Diyagramı

C# ile Composite Pattern Uygulaması 🧑‍💻

Şimdi .NET C# ile gerçek bir örnek üzerinden ilerleyelim.

Senaryo:

Bir şirket yapısını temsil ediyoruz. Her çalışan bir Employee olabilir ama bazı çalışanlar diğer çalışanları yönetebilir.

1. Ortak Arabirim (Component)

public interface IEmployee { string GetDetails(int indent = 0); }

2. Leaf (Yaprak Nesne)

public class Developer : IEmployee { public string Name { get; set; } public string Position { get; set; } public Developer(string name, string position) { Name = name; Position = position; } public string GetDetails(int indent = 0) { return new string(' ', indent) + $"- {Position}: {Name}\n"; } }

3. Composite (Bileşik Nesne)

public class Manager : IEmployee { public string Name { get; set; } public string Position { get; set; } private readonly List _subordinates = new(); public Manager(string name, string position) { Name = name; Position = position; } public void AddEmployee(IEmployee employee) { _subordinates.Add(employee); } public string GetDetails(int indent = 0) { var result = new string(' ', indent) + $"+ {Position}: {Name}\n"; foreach (var emp in _subordinates) { result += emp.GetDetails(indent + 4); } return result; } }

4. Kullanım (Client)

var dev1 = new Developer("Ahmet Yılmaz", "Senior Developer"); var dev2 = new Developer("Merve Kaya", "Frontend Developer"); var teamLead = new Manager("Burak Demir", "Team Lead"); teamLead.AddEmployee(dev1); teamLead.AddEmployee(dev2); var dev3 = new Developer("Elif Arslan", "Backend Developer"); var departmentManager = new Manager("Zeynep Koç", "Development Manager"); departmentManager.AddEmployee(teamLead); departmentManager.AddEmployee(dev3); Console.WriteLine(departmentManager.GetDetails());

🔸 Çıktı:

+ Development Manager: Zeynep Koç    + Team Lead: Burak Demir        - Senior Developer: Ahmet Yılmaz        - Frontend Developer: Merve Kaya    - Backend Developer: Elif Arslan

Gördüğünüz gibi, hem tekil nesneleri (Developer) hem de karmaşık nesneleri (Manager) aynı arabirimden çağırıyoruz.

Composite Pattern’ın Avantajları ✅

  • Hiyerarşi oluşturmak çok kolaydır.
  • Tekil ve grup nesneleri aynı şekilde yönetilebilir.
  • Yeni nesneleri sisteme kolayca entegre edebilirsiniz.
  • Kodunuzu sadeleştirir, tekrarları önler.

Dezavantajları ⚠️

  • Tüm sınıfların aynı arabirimi (interface) uygulaması, bazı durumlarda gereksiz karmaşıklık oluşturabilir.
  • Bazı özel işlevler yalnızca belirli türlerde uygunsa, bu durum pattern’de kısıtlama yaratabilir.

Composite Tasarımı Nerelerde Kullanılır? 🎯

  • UI bileşenleri (TreeView, Menu yapıları)
  • Dosya sistemleri
  • Organizasyon şemaları
  • Grafik boyama uygulamaları
  • XML veya JSON ağaç yapıları

Sonuç 🧠

Composite Design Pattern, karmaşık hiyerarşik yapıları sade ve anlaşılır biçimde modellemek için harika bir çözümdür. C# ve .NET ile kullanımı oldukça kolaydır ve doğru kullanıldığında yazılım mimarinizi bir üst seviyeye taşıyabilir.

Unutmayın, iyi bir yazılımcı olmak; sadece kod yazmak değil, aynı zamanda doğru mimariyi seçmektir.

Daha Fazla Kaynak

Sizin projelerinizde Composite Pattern’ı nasıl kullanırsınız? Yorumlarda bizimle paylaşın! 👇

Etiketler: #CompositePattern #DesignPatterns #CSharp #DotNet #SoftwareArchitecture #OOP #YazılımMimarisi

Organizasyon Şeması Composite Pattern
Programcılar için Çalışma Alanı
Dosya Sistemi Ağaç Görünümü
Takım Beyin Fırtınası Tasarım Desenleri

You may also like...

Bir yanıt yazın

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