ASP.NET Core ile Clean Architecture: Uygulamalı Proje Rehberi

ASP.NET Core ile Clean Architecture: Uygulamalı Proje Rehberi

ASP.NET Core ile Clean Architecture: Uygulamalı Proje Rehberi

Clean Architecture yalnızca projeyi klasörlere ayırmak değildir. Temel amaç, iş kurallarını veritabanı, web çatısı ve dış servisler gibi değişken ayrıntılardan korumaktır. Bu yaklaşım özellikle uzun ömürlü uygulamalarda test edilebilirliği artırır, teknoloji değişikliklerinin maliyetini düşürür ve ekiplerin aynı sınırlar içinde çalışmasını sağlar.

Bağımlılık kuralı nasıl çalışır?

Merkezde Domain bulunur ve başka hiçbir katmana bağımlı olmaz. Application katmanı kullanım senaryolarını ve ihtiyaç duyduğu arayüzleri tanımlar. Infrastructure bu arayüzleri SQL Server, e-posta veya dosya sistemi gibi teknolojilerle uygular. Web katmanı ise HTTP isteğini bir kullanım senaryosuna dönüştürür. Referanslar dıştan içe doğru ilerler; Domain hiçbir zaman Entity Framework veya MVC bilmez.

Sipariş oluşturma kullanım senaryosu

Aşağıdaki örnekte Application katmanı veritabanının nasıl çalıştığını bilmez. Yalnızca ihtiyaç duyduğu sözleşmeyi kullanır. Infrastructure katmanı daha sonra bu sözleşmeye EF Core uygulaması sağlayabilir.

public interface IOrderRepository
{
    Task AddAsync(Order order, CancellationToken ct);
}

public sealed class CreateOrderHandler
{
    private readonly IOrderRepository _orders;

    public CreateOrderHandler(IOrderRepository orders) => _orders = orders;

    public async Task<int> Handle(CreateOrder command, CancellationToken ct)
    {
        var order = Order.Create(command.CustomerId, command.Items);
        await _orders.AddAsync(order, ct);
        return order.Id;
    }
}

Handler yalnızca iş akışına odaklanır. SQL sorgusu, HTTP istemcisi veya log dosyası bu sınıfa sızmaz. Birim testinde sahte repository verilebilir; üretimde ise aynı arayüz EF Core sınıfına bağlanır. Böylece test, gerçek veritabanına ihtiyaç duymadan sipariş kurallarını doğrular.

Adım adım uygulama

  1. Domain projesinde entity, value object ve domain kurallarını tanımlayın; framework paketlerini bu projeye eklemeyin.
  2. Application projesinde kullanım senaryolarını, DTO'ları ve dış kaynaklar için gereken arayüzleri oluşturun.
  3. Infrastructure projesinde DbContext, repository ve dış servis adaptörlerini uygulayın.
  4. Web projesinde yalnızca doğrulama, kimlik doğrulama ve HTTP yanıtı üretme sorumluluklarını bırakın.
  5. Her kullanım senaryosu için başarılı akışın yanında hata ve sınır durumlarını kapsayan testler yazın.

Sık yapılan hatalar

  • Her tablo için gereksiz repository üretmek ve EF Core'un sunduğu sorgulama yeteneklerini tekrar yazmak.
  • Domain katmanında DbContext, IConfiguration veya HttpContext kullanarak bağımlılık yönünü tersine çevirmek.
  • Katman sayısını amaç hâline getirip küçük projelerde gereksiz soyutlama ve dosya kalabalığı oluşturmak.

Sonuç

Clean Architecture doğru uygulandığında kodun merkezinde teknoloji değil iş davranışı kalır. İlk yatırım basit CRUD projelerinde fazla görünebilir; ancak farklı veri kaynakları, test senaryoları ve büyüyen ekipler devreye girdiğinde sınırların değeri hızla ortaya çıkar. En iyi başlangıç, bütün sistemi bir anda soyutlamak yerine tek bir kritik kullanım senaryosunu bu kurallarla tamamlamaktır.

0 Yorumlar

Yorum Yaz

E-posta adresiniz yayınlanmayacaktır.