.NET Projelerinde Clean Architecture Kullanımı
Birçok .NET projesi başlangıçta hızlı ilerler. Ancak proje büyüdükçe teknik borçlar, karmaşık bağımlılıklar, test zorlukları ve bakım problemleri ortaya çıkmaya başlar.
Kod tabanı büyüdüğünde küçük bir değişiklik bile farklı katmanları etkileyebilir. Yeni özellik eklemek zorlaşır, refaktör süreçleri riskli hale gelir ve ekipler zamanla mevcut yapıyı değiştirmekten çekinir.
İşte bu noktada Clean Architecture, yani temiz mimari yaklaşımı devreye girer.
Clean Architecture, .NET projelerinde uzun vadeli sürdürülebilirlik, test edilebilirlik ve bakım kolaylığı sağlamak için kullanılan güçlü bir mimari yaklaşımdır.
Clean Architecture Nedir?
Clean Architecture, Robert C. Martin tarafından popülerleştirilen ve bağımlılıkların merkeze doğru yöneldiği bir yazılım mimarisi yaklaşımıdır.
Bu mimarinin temel amacı, uygulamanın iş kurallarını dış dünyadan bağımsız hale getirmektir.
Yani uygulamanın merkezinde:
- Domain modelleri
- İş kuralları
- Use case yapıları
bulunur.
Veritabanı, kullanıcı arayüzü, framework, external API ve üçüncü parti servisler ise dış katmanlarda yer alır.
Clean Architecture’ın temel mantığı şudur: İş kuralları teknolojiye bağımlı olmamalıdır.
Clean Architecture Katmanları
1. Domain Katmanı
Domain katmanı uygulamanın merkezidir.
Bu katmanda:
- Entity sınıfları
- Value object yapıları
- Domain kuralları
- Temel iş mantığı
yer alır.
Domain katmanı hiçbir framework’e bağımlı olmamalıdır. Entity Framework, ASP.NET Core, veritabanı ya da dış servis bağımlılığı bu katmanda bulunmamalıdır.
2. Application Katmanı
Application katmanı, uygulamanın use case yapılarını içerir.
Örneğin:
- Sipariş oluşturma
- Ürün listeleme
- Kullanıcı kaydı
- Ödeme işlemi başlatma
gibi uygulama akışları bu katmanda yönetilir.
Application katmanı genellikle interface’leri ve business workflow yapılarını barındırır.
3. Infrastructure Katmanı
Infrastructure katmanı dış dünya ile iletişimi sağlar.
Bu katmanda:
- Entity Framework Core repository implementasyonları
- Dapper veri erişim kodları
- Email servisleri
- SMS servisleri
- Dosya işlemleri
- Harici API entegrasyonları
yer alabilir.
Infrastructure katmanı, Application katmanında tanımlanan interface’lerin gerçek implementasyonlarını içerir.
4. Presentation / API Katmanı
Bu katman kullanıcının veya dış sistemlerin uygulama ile iletişime geçtiği katmandır.
.NET projelerinde genellikle:
- ASP.NET Core Web API
- MVC
- Blazor
- Minimal API
bu katmanda yer alır.
API katmanı mümkün olduğunca sade tutulmalıdır. Controller veya endpoint yapıları yalnızca request almalı, ilgili use case’i çağırmalı ve response dönmelidir.
Clean Architecture’da Bağımlılık Kuralı
Clean Architecture’ın en kritik prensibi bağımlılıkların içe doğru akmasıdır.
Yani dış katmanlar iç katmanları bilir; ancak iç katmanlar dış katmanları bilmez.
Örneğin:
- API katmanı Application katmanını bilir
- Infrastructure katmanı Application interface’lerini implemente eder
- Application katmanı Domain katmanını bilir
- Domain katmanı hiçbir dış katmana bağımlı değildir
Bu sayede iş kuralları, framework ve veritabanı değişikliklerinden etkilenmez.
.NET Projelerinde Clean Architecture Neden Kullanılır?
Test Edilebilirlik
Clean Architecture sayesinde iş mantığı framework’ten bağımsız hale gelir.
Bu durum unit test yazmayı kolaylaştırır.
Özellikle Application ve Domain katmanları dış bağımlılıklardan arındırıldığı için test süreçleri daha hızlı ve güvenilir olur.
Bakım Kolaylığı
Katmanların sorumlulukları net olduğu için kod tabanı daha anlaşılır hale gelir.
Yeni bir geliştirici projeye dahil olduğunda hangi kodun nerede yer aldığını daha kolay kavrar.
Teknolojiden Bağımsızlık
Clean Architecture’da iş kuralları teknolojiye bağımlı değildir.
Bu sayede:
- Entity Framework yerine Dapper kullanılabilir
- MVC yerine Minimal API tercih edilebilir
- Email sağlayıcısı değiştirilebilir
- Veritabanı motoru değiştirilebilir
ve bu değişiklikler uygulamanın çekirdeğini bozmaz.
Uzun Vadeli Sürdürülebilirlik
Büyük projelerde asıl maliyet ilk geliştirme süreci değil, bakım ve değişiklik süreçleridir.
Clean Architecture bu maliyeti düşürmek için güçlü bir yapı sunar.
Clean Architecture ve Dependency Injection
Dependency Injection, Clean Architecture’ın temel parçalarından biridir.
Application katmanında interface’ler tanımlanır, gerçek implementasyonlar ise Infrastructure katmanında bulunur.
Uygulama çalışırken DI container hangi interface’in hangi sınıfla eşleşeceğini belirler.
Bu yaklaşım:
- Bağımlılıkları azaltır
- Test yazmayı kolaylaştırır
- Mock kullanımını mümkün hale getirir
- Katmanlar arası esnekliği artırır
Clean Architecture Uygularken Dikkat Edilmesi Gerekenler
- Her şeyi gereksiz yere soyutlamayın
- Domain katmanını framework bağımlılıklarından koruyun
- Application katmanını use case odaklı tasarlayın
- Controller veya endpoint içine business logic yazmayın
- Infrastructure kodlarını çekirdeğe taşımayın
- Dependency Inversion prensibini doğru uygulayın
Clean Architecture yanlış uygulanırsa gereksiz karmaşıklığa dönüşebilir. Bu nedenle mimariyi projenin ihtiyacına göre sade ve dengeli kurmak gerekir.
Clean Architecture Gerçek Proje Örneği
Bir e-ticaret projesi üzerinden düşünelim.
Domain katmanında:
- Product
- Order
- Customer
- Payment
entity’leri yer alabilir.
Application katmanında:
- CreateOrderCommand
- GetProductListQuery
- CancelOrderCommand
- CompletePaymentCommand
gibi use case yapıları bulunabilir.
Infrastructure katmanında:
- EF Core repository sınıfları
- Email gönderim servisleri
- Payment provider entegrasyonları
- Cache servisleri
yer alır.
API katmanı ise sadece dış dünyadan gelen request’leri alır ve ilgili application handler’ı çağırır.
Bu yapı sayesinde veritabanı, ödeme sağlayıcısı veya API sunum şekli değişse bile iş kuralları korunur.
Clean Architecture Her Proje İçin Gerekli mi?
Clean Architecture güçlü bir yaklaşım olsa da her proje için zorunlu değildir.
Küçük, kısa ömürlü ve basit CRUD projelerinde gereksiz katmanlar geliştirme hızını düşürebilir.
Ancak:
- Uzun vadeli geliştirilecek projelerde
- Kurumsal uygulamalarda
- Yoğun iş kuralı içeren sistemlerde
- Test edilebilirliğin önemli olduğu projelerde
- Farklı ekiplerin aynı kod tabanında çalıştığı yapılarda
Clean Architecture ciddi avantaj sağlar.
Sonuç
Clean Architecture, .NET projelerinde sürdürülebilir ve uzun ömürlü kod tabanı oluşturmak için güçlü bir mimari yaklaşımdır.
Bu yaklaşım sayesinde iş kuralları framework’lerden bağımsız hale gelir, test süreçleri kolaylaşır ve teknoloji değişiklikleri daha düşük maliyetle yönetilebilir.
Özellikle büyük ölçekli .NET projelerinde Clean Architecture kullanımı:
- Teknik borcu azaltır
- Bakım maliyetini düşürür
- Test edilebilirliği artırır
- Yeni özellik geliştirmeyi kolaylaştırır
- Projenin uzun vadeli sürdürülebilirliğini güçlendirir
Clean Architecture’ın asıl amacı daha fazla katman oluşturmak değil, iş kurallarını koruyan, değişime açık ve sürdürülebilir bir yazılım mimarisi kurmaktır.