Uygulama katmanı
Katmanlar: Domain, Application, Infrastructure
Bu projenin backend’i dört projeye ayrılmış. Neden ve bağımlılıklar hangi yöne akar?
Kavramı anlayalım
Bu sitenin API’si dört projeden oluşur. Domain, iş kavramlarını (yazı, proje, mesaj) ve kurallarını içerir; hiçbir çerçeveye bağımlı değildir. Application, kullanım senaryolarını (yayımlanmış yazıyı getir, mesaj kaydet) ve onların ihtiyaç duyduğu arayüzleri tanımlar; dışarıya veri aktarım nesneleri (DTO) sunar. Infrastructure, bu arayüzlerin somut uygulamalarını içerir: EF Core DbContext’i, SQL sorguları, dosya depolama. Api ise HTTP’yi Application’a bağlayan en dış katmandır.
Bağımlılıklar içeri doğru akar: Api ve Infrastructure, Application’ı bilir; Application, Domain’i bilir; Domain kimseyi bilmez. Böylece iş kuralları veritabanı veya web çerçevesi değiştiğinde etkilenmez ve çerçeve olmadan test edilebilir.
Katmanlama bir amaç değil araçtır. Küçük bir projede dört katman gereksiz tören olabilir. Ama yönetim paneli, iki dilli içerik, önbellek ve güvenlik kuralları olan bir sistemde sorumlulukların nerede yaşadığını açıkça bilmek, değişiklikleri güvenli kılar.
Sorumlulukların net yeri, değişiklikleri küçük ve öngörülebilir tutar.
Domain projesine EF Core veya ASP.NET Core referansı ekleyip iç katmanı çerçeveye bağlamak.
Aynı konu. Üç farklı derinlik.
backend/
AtaberkSahin2.Domain/ Content.cs (varlıklar, kurallar)
AtaberkSahin2.Application/ ContentContracts.cs, Queries/ (DTO, arayüzler)
AtaberkSahin2.Infrastructure/ PortfolioDbContext.cs, ContentStore.cs
AtaberkSahin2.Api/ Controllers/, Middleware/, Program.csBu projenin gerçek klasör yapısı.
Bu sayfa gerçek bir sunucuya veya veritabanına bağlanmaz. Kod örnekleri .NET 8, Next.js ve SQL Server için temsilîdir; süreler simülasyondaki örnek değerlerdir, ölçüm değildir. Örnekleri yalnız kendi geliştirme ortamında dene; gerçek bağlantı dizesi, token veya parola paylaşma.
Önce kendin dene.
Yazı yayımlanırken ‘başlık boş olamaz ve yayın tarihi gelecekte olamaz’ kuralı var. Bu kural hangi katmanda yaşamalı?
Çözümü ve açıklamasını göster
Domain (veya Application’daki kullanım senaryosu).
Controller yalnız girdiyi alır; kural, HTTP’den bağımsız
bir yerde olmalı ki yönetim paneli, içe aktarma veya arka plan işi aynı kuralı kullansın.İş kuralı en iç katmana yakın yaşar. Böylece hangi kanaldan gelirse gelsin aynı kural uygulanır.