crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Clean Architecture: Kodun Geleceğini Garanti Altına Almak
Clean Architecture, yazılımın iş mantığını (Business Logic), dış dünyadan (veritabanı, arayüz, harici kütüphaneler) tamamen izole eden katmanlı bir yapıdır. Temel felsefesi: "Bağımlılıklar daima içe doğru olmalıdır."
1. Mimari Katmanlar ve Soğan (Onion) Yapısı
Clean Architecture denince akla iç içe geçmiş halkalar gelir. En içteki halka en bağımsız olanıdır.
[]Domain (Çekirdek): Uygulamanın kalbidir. Entity'ler, kural setleri ve interface'ler burada yer alır. Hiçbir kütüphaneye veya framework'e bağımlı değildir.
[]Application (Uygulama Mantığı): İş akışlarının (Use Cases) yönetildiği katmandır. DTO'lar, Mapper'lar ve servis arayüzleri buradadır.
[]Infrastructure (Altyapı): Veritabanı erişimi (EF Core, Dapper), e-posta gönderimi veya dosya depolama gibi dış dünya işlemlerinin gerçeklendiği yerdir.
[]Web API / UI (Sunum): Kullanıcının etkileşime girdiği katmandır. Sadece veriyi alır ve Application katmanına iletir.
2. Bağımlılık Kuralı (Dependency Rule)
Clean Architecture'ın altın kuralı şudur: Dış halkalar, iç halkalardaki kodları bilebilir; ancak iç halkalar dışarıda neler olup bittiğinden tamamen habersizdir.
Örneğin; Domain katmanındaki bir nesne, onun bir SQL veritabanına mı yoksa bir Excel dosyasına mı kaydedileceğini bilmez. O sadece "kaydedilme" kuralını bilir. Gerçek kaydetme işlemini Infrastructure halleder.
3. Neden Clean Architecture Kullanmalıyız?
| Avantaj | Açıklama |
|---|---|
| Framework Bağımsızlığı | .NET sürümü değişse veya başka bir araca geçilse bile iş mantığınız zarar görmez. |
| Test Edilebilirlik | İş kuralları arayüzden ve veritabanından bağımsız olduğu için kolayca test edilebilir. |
| Veritabanı Esnekliği | SQL Server'dan MongoDB'ye geçmek sadece Infrastructure katmanını ilgilendirir. |
| Sürdürülebilirlik | Yeni geliştiriciler projeye dahil olduğunda neyin nerede olduğunu kolayca anlar. |
4. .NET Proje Klasör Yapısı Örneği
Tipik bir Clean Architecture çözümünde şu projeleri görürsünüz:
Kod:
src/
├── MyProject.Domain/ (Entities, Exceptions, ValueObjects)
├── MyProject.Application/ (Interfaces, Mapping, UseCases, DTOs)
├── MyProject.Infrastructure/ (Persistence, Services, Logging)
└── MyProject.WebAPI/ (Controllers, Middleware, Program.cs)
Sonuç
Clean Architecture, küçük bir "Hello World" projesi için fazla gelebilir (over-engineering). Ancak orta ve büyük ölçekli, uzun yıllar yaşaması planlanan projeler için bir can simididir. Bağımlılıkları doğru yönetmek, kodunuzun zamanın etkilerine karşı dirençli olmasını sağlar.