Clean Architecture Nedir?
Robert C. Martin'in (Uncle Bob) önerdiği, bağımlılıkların yalnızca içe doğru aktığı katmanlı mimaridir. Test edilebilirlik ve bakım kolaylığı sağlar.
Katmanlar
- Domain: Entity'ler, value objects, domain events. Hiçbir dış bağımlılık yok.
- Application: Use case'ler, interface'ler, DTO'lar. Yalnızca Domain'e bağımlı.
- Infrastructure: EF Core, email, dosya sistemi. Application interface'lerini implemente eder.
- Presentation: API Controller'lar, Blazor komponentleri.
CQRS ile Birlikte
// Query
public record UrunListesiQuery : IRequest<List<UrunDto>>;
// Handler
public class UrunListesiHandler : IRequestHandler<UrunListesiQuery, List<UrunDto>> {
private readonly IUrunRepository _repo;
public UrunListesiHandler(IUrunRepository repo) => _repo = repo;
public async Task<List<UrunDto>> Handle(UrunListesiQuery req, CancellationToken ct) =>
(await _repo.GetAllAsync()).Select(u => new UrunDto(u.Id, u.Ad, u.Fiyat)).ToList();
}MediatR ile
// Controller'da
var sonuc = await _mediator.Send(new UrunListesiQuery());
return Ok(sonuc);