BuildingBlocks.Specification, Ardalis.Specification 9.x üzerine kurulu ince bir katmandır. Sorgu mantığını (where/include/orderby/paging) repository’den ayrı, test edilebilir ve cache’lenebilir spec sınıflarına taşır. İki ek değer sunar: in-memory mantıksal kombinatörler (And/Or/Not) ve spec’e doğrudan cache tag/TTL iliştirme.
Repository altyapısı (
EFRepository, CachedRepository, ListAsync) ve hibrit cache davranışı için bkz. Veri Katmanı ve Cache.CompositeSpecification<T>
Spec’lerin türetildiği temel sınıf. Ardalis.Specification.Specification<T>’i genişletir ve in-memory değerlendirme için IInMemorySpecification<T> sağlar.
| Üye | Amaç |
|---|---|
IsSatisfiedBy(T) | Bir adayın (DB’ye gitmeden) spec’i karşılayıp karşılamadığını döner |
And / AndNot / Or / OrNot / Not | İki spec’i in-memory mantıksal olarak birleştirir (AndSpecification<T> vb. döndürür) |
Query.* zinciri (Where, Include, OrderBy, Skip, Take) Ardalis’ten gelir ve EF Core’a çevrilir; IsSatisfiedBy ise aynı kuralı bellekte de uygulanabilir kılar.
Filtreler — IFilter / FilterBase
API’den gelen liste/arama parametrelerini standartlaştıran kontrat. FilterBase türetilerek aggregate’e özel filtre yapılır.
| Üye | Tip | Açıklama |
|---|---|---|
HasTenant | bool | TenantId.HasValue |
IsPagingEnabled | bool | PageSize > 0 && Page >= 0 |
HasSearch / HasSort | bool | SearchTerm / SortBy dolu mu |
Page / PageSize | int | Sayfalama (0-based — bkz. uyarı) |
Skip / Take | int | PaginationHelper.CalculateSkip/Take’ten hesaplanır |
TenantId | Guid? | Multi-tenant filtre |
OrderBy | string | "asc" / "desc" — OrderByASC/OrderByDESC türetilir |
SortBy | string | Sıralanacak alan adı |
SearchTerm | string | Arama; IsSearchTermNumeric/IsSearchTermTckn/IsSearchTermDateTime yardımcıları |
Cache entegrasyonu
Cache, Ardalis’in mevcutQuery.EnableCache(name, args) zinciriyle açılır. Paket buna iki fluent uzantı ekler:
| Uzantı | Etki |
|---|---|
WithTags(params string[]) | Spec’e invalidation tag’leri iliştirir (SetCacheTags) — CachedRepository bunları HybridCache.GetOrCreateAsync’e geçirir |
WithCacheTtl(TimeSpan) | Spec’e per-entry TTL iliştirir (SetCacheTTL) — HybridCacheEntryOptions.Expiration’a yansır |
Ad bilerek
WithCacheTtl’dir — Ardalis’in WithTimeToLive’i ile ambiguous reference olmasın diye. Aynı şekilde paralel ICacheSpecificationBuilder<T> kaldırılmıştır; Ardalis.Specification.ICacheSpecificationBuilder<T> kullanılır.Kullanım — spec tanımı + Repository.ListAsync
İlgili
Veri katmanı
EFRepository, CachedRepository ve SpecificationEvaluator.
Cache
EnableCache/WithTags ile hibrit cache entegrasyonu.
Domain
Spec’lerin aggregate başına organizasyonu.
Invalidation
Tag-based eviction ve domain event tetikleme.