Programlamada Tasarım Desenleri #15 — Chain Of Responsibility Design Pattern (dotnet c#)
Programlamada Tasarım Desenleri #15 — Chain Of Responsibility (Sorumluluk Zinciri) Tasarım Deseni – .NET C# ile Uygulama
Programlamada daha sürdürülebilir, esnek ve okunabilir kodlar yazmak isteyen yazılımcılar için Tasarım Desenleri (Design Patterns) adeta kutsal bir rehberdir. Bu yazı dizimizin 15. bölümünde karşımıza çıkan desen: Chain of Responsibility Design Pattern ya da Türkçesiyle Sorumluluk Zinciri Tasarım Deseni.
Bu yazımızda Chain of Responsibility deseninin ne olduğunu açıklayacağız, hangi durumlarda kullanılmalı ve .NET C# ile kapsamlı örneğini sunacağız. Ayrıca SEO uyumlu anahtar kelimelere dikkat ederek sizler için en bilgilendirici ve teknik kaynak olmayı hedefliyoruz.

📘 Chain Of Responsibility Tasarım Deseni Nedir?
Chain of Responsibility, nesneler arasında bir zincir oluşturarak isteğin (request) bu zincir boyunca ilerlemesini sağlar. Her nesne isteği ya işler ya da zincirdeki bir sonraki nesneye iletir. Bu sayede istemcinin (client) hangi nesnenin işlemi gerçekleştireceğini bilmesine gerek kalmaz.
🔍 Başlıca Avantajlar:
- Nesneler arasında gevşek bağlılık sağlar (loose coupling)
- Yeni handler’lar eklemek kolaydır
- İş akışları dinamik olarak değiştirilebilir
🎯 Nerelerde Kullanılır?
- Bir isteğin birden fazla nesne tarafından sırasıyla işlenmesi gereken durumlarda
- Olay yönetimi (Event handling) senaryolarında
- Middleware (ara katman) yapılarında
- İş kurallarının dinamik şekilde uygulanmasında
> Gerçek dünya örneği: Ofiste gelen bir evrak önce sekretere gelir, uygun değilse müdüre iletir, gerekirse daha üst yönetime gider. Her biri belgede işlem yapabilir veya pas geçebilir. Bu bir Sorumluluk Zinciridir.

🛠 .NET C# ile Chain of Responsibility Örneği
Senaryomuz: Basit bir sipariş doğrulama sisteminde, istek sırasıyla Validation → Authorization → Logging handler’larından geçecek.
1️⃣ Handler Arayüzü (Handler Interface)
public abstract class Handler
{
private Handler _next;
public Handler SetNext(Handler next)
{
_next = next;
return next;
}
public virtual void Handle(Request request)
{
if (_next != null)
_next.Handle(request);
}
}
2️⃣ Request Sınıfı
public class Request
{
public string Username { get; set; }
public string OrderDetails { get; set; }
public bool IsAdmin { get; set; }
}
3️⃣ Konkrete Handler Sınıfları (Concrete Handlers)
🔐 AuthorizationHandler
public class AuthorizationHandler : Handler
{
public override void Handle(Request request)
{
if (!request.IsAdmin)
{
Console.WriteLine("🚫 Yetki reddedildi: Sadece adminler işlem yapabilir.");
return;
}
Console.WriteLine("✅ Authorization geçildi.");
base.Handle(request);
}
}
🧪 ValidationHandler
public class ValidationHandler : Handler
{
public override void Handle(Request request)
{
if (string.IsNullOrEmpty(request.OrderDetails))
{
Console.WriteLine("❌ Sipariş içeriği boş olamaz.");
return;
}
Console.WriteLine("✅ Validation başarıyla tamamlandı.");
base.Handle(request);
}
}
📝 LoggingHandler
public class LoggingHandler : Handler
{
public override void Handle(Request request)
{
Console.WriteLine($"📝 {DateTime.Now} - Sipariş işlemde: {request.Username}");
base.Handle(request);
}
}
4️⃣ Zincir Kurulumu ve Kullanım
class Program
{
static void Main(string[] args)
{
var validation = new ValidationHandler();
var auth = new AuthorizationHandler();
var logging = new LoggingHandler();
// Zinciri oluştur
validation.SetNext(auth).SetNext(logging);
// Örnek istek
var request = new Request
{
Username = "john_doe",
IsAdmin = true,
OrderDetails = "2 adet mouse"
};
validation.Handle(request);
}
}
📌 Kod çalıştığında çıktı şu şekilde olacaktır:
✅ Validation başarıyla tamamlandı.
✅ Authorization geçildi.
📝 2024-04-01 12:30:00 - Sipariş işlemde: john_doe
🧠 Chain Of Responsibility ile Middleware Benzetimi
ASP.NET Core middleware yapısı aslında tam anlamıyla Chain of Responsibility’nin bir uygulamasıdır.
app.Use(async (context, next) =>
{
// Önce işlem
await next.Invoke();
// Sonra işlem
});
Bu yapıdaki “next” çağrısı bir sonrakine paslama işlevini görür.
👉 Chain of Responsibility tasarım deseni, .NET dünyasında ASP.NET Core pipeline, Entity Framework interception, Exception Handling gibi birçok noktada doğrudan ya da dolaylı olarak kullanılır.

📌 SEO Uyumlu Anahtar Kelimeler:
- Chain of Responsibility Design Pattern nedir?
- C# design pattern örnekleri
- Dotnet tasarım desenleri
- Middleware yapısı C#
- OOP ve Design Patterns ilişkisi
🎨 Bonus: Chain of Responsibility Akış Şeması
Görsel açısından daha iyi kavrayabilmeniz için aşağıdaki diyagramı inceleyin:

*Kaynak: Refactoring.Guru*
✅ Sonuç
Chain of Responsibility tasarım deseni sayesinde kodlarımız daha modüler, okunabilir ve genişletilebilir hale gelir. Özellikle isteklerin sıralı şekilde işlenmesini gerektiren durumlarda bu deseni kullanmak, hem hata yönetimini hem de esnekliği artıracaktır.
.NET C# ile güçlü handler zincirleri kurarak, kodunuzu daha temiz ve SOLID prensiplerine uygun hale getirebilirsiniz.
📚 Ek Kaynaklar
- Refactoring.Guru – Chain of Responsibility
- Microsoft Docs – Middleware in ASP.NET Core
- Gang of Four Tasarım Desenleri Kitabı
Eğer bu yazı işinize yaradıysa yorum yapmayı ve paylaşmayı unutmayın! ❤️
Bir sonraki desende görüşmek üzere!
🔔 Blog serisinin diğer yazılarını kaçırmamak için bildirimleri açabilir veya bizi sosyal medyada takip edebilirsiniz!
Etiketler: C# Design Patterns, Dotnet Core, Chain of Responsibility Nedir, Middleware, .NET Yazılım Mühendisliği