Referans grafiği
İzin verilen bağımlılıklar
Bağımlılık inversiyonu (DIP) nasıl uygulanır?
Application bir altyapı yeteneğine ihtiyaç duyduğunda arayüzü kendisi (veya SharedKernel) tanımlar, implementasyonu Infrastructure verir:
Böylece Application, somut Redis/RabbitMQ/SMTP sınıflarını değil, soyutlamaları kullanır; test edilebilirlik ve sağlayıcı değiştirilebilirliği kazanılır.
Domain saflığı (purity)
Domain ve SharedKernel’in dış dünyaya tek dokunuşuBuildingBlocks.Specification üzerinedir (Ardalis.Specification). Bu bilinçli bir tavizdir: sorgu tanımlarını (spec) Domain’de tutmak, repository imzalarını temiz tutar. Persistence detayı (EF Core) yine de Infrastructure’dadır.
Build sırası
MSBuild bağımlılık grafiğine göre sıralar:Sık yapılan hatalar
Domain'den Infrastructure'a referans
Domain'den Infrastructure'a referans
Bir aggregate içinde DbContext veya HTTP client kullanmaya çalışmak. Çözüm: ihtiyacı bir Domain Service arayüzüyle ifade et, implementasyonu Infrastructure’a koy.
Handler içinde SaveChanges çağırmak
Handler içinde SaveChanges çağırmak
EFRepository.SaveChangesAsync() bilinçli olarak exception fırlatır. Daima IUnitOfWork.SaveEntitiesAsync() kullanılır — domain event dispatch buna bağlıdır. Bkz. Veri Katmanı › DbContext.BuildingBlocks'tan Application'a referans
BuildingBlocks'tan Application'a referans
BuildingBlocks yatay ve uygulamadan habersizdir. Application onları kullanır, tersi olmaz.