İşlem Hattı Davranışları
Kesitsel mantığı davranışlarla ekleyin.
İşlem Hattı Davranışları, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Birden Çok Alanı İlgilendiren Kaygılar
Günlükleme, doğrulama, zamanlama ve işlemler çok sayıda handler'a uygulanır. Bu kodu her handler'a kopyalamak tekrara ve hatalara yol açar.
MediatR'ın işlem hattı davranışları, her isteği ortak mantıkla sarmanızı sağlar.
// One behavior runs around all handlersIPipelineBehavior Arayüzü
Bir davranış, IPipelineBehavior<TRequest, TResponse> uygular. Davranışın Handle yöntemi isteği ve işlem hattının geri kalanını çağıran next temsilcisini alır.
public class LoggingBehavior<TRequest, TResponse>
: IPipelineBehavior<TRequest, TResponse>
where TRequest : notnull
{
public async Task<TResponse> Handle(
TRequest request,
RequestHandlerDelegate<TResponse> next,
CancellationToken ct)
{
// before
var response = await next();
// after
return response;
}
}Sonraki Temsilci
next(), sonraki davranışı veya bu son davranışsa gerçek handler'ı çağırır. Çağrıdan önceki kod girişte, sonraki kod ise çıkışta çalışır.
// [Behavior A in] -> [Behavior B in] -> [Handler]
// <- [Behavior B out] <- [A out]Günlükleme Davranışı
Somut bir günlükleme davranışı, girişte istek adını, çıkışta ise geçen süreyi kaydeder.
public async Task<TResponse> Handle(
TRequest request,
RequestHandlerDelegate<TResponse> next,
CancellationToken ct)
{
var name = typeof(TRequest).Name;
_logger.LogInformation("Handling {Name}", name);
var sw = Stopwatch.StartNew();
var response = await next();
_logger.LogInformation("{Name} took {Ms}ms", name, sw.ElapsedMilliseconds);
return response;
}Bir Davranışı Kaydetme
Açık genel tür davranışını DI'ye kaydedin. MediatR bunu her isteğe uygular.
builder.Services.AddTransient(
typeof(IPipelineBehavior<,>),
typeof(LoggingBehavior<,>));Doğrulama Davranışı
Yaygın kullanımlardan biri, FluentValidation ile istek doğrulamasıdır. Davranış, handler çalışmadan önce tüm doğrulayıcıları çalıştırır ve herhangi biri başarısız olursa hata fırlatır.
public async Task<TResponse> Handle(
TRequest request,
RequestHandlerDelegate<TResponse> next,
CancellationToken ct)
{
var context = new ValidationContext<TRequest>(request);
var failures = _validators
.Select(v => v.Validate(context))
.SelectMany(r => r.Errors)
.Where(f => f is not null)
.ToList();
if (failures.Count != 0)
throw new ValidationException(failures);
return await next();
}Kısa Devreye Alma
Bir davranış, next() çağrısını yapmadan geri dönerek handler'ı tamamen atlayabilir; bu, sorgu sonuçlarını önbelleğe almak veya geçersiz istekleri reddetmek için kullanışlıdır.
if (_cache.TryGet(key, out TResponse cached))
return cached; // handler never runs
var response = await next();
_cache.Set(key, response);
return response;Davranışları Sıralama
Davranışlar kaydedildikleri sırayla çalışır. Günlüklemeyi en dışa, ardından doğrulamayı ve sonra işlemleri yerleştirin; böylece her davranış bir sonrakini doğru şekilde sarar.
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(LoggingBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(TransactionBehavior<,>));İşlem Davranışı
Tüm işlemin atomik olarak tamamlanması veya geri alınması için komut handler'larını bir veritabanı işlemiyle sarın.
await using var tx = await _db.Database.BeginTransactionAsync(ct);
try
{
var response = await next();
await tx.CommitAsync(ct);
return response;
}
catch
{
await tx.RollbackAsync(ct);
throw;
}Belirli İstekleri Hedefleme
Bir davranışın yalnızca katılmayı seçen isteklere uygulanması için işaretleyici bir arayüz ve genel tür kısıtı kullanın; örneğin işlemler yalnızca komutlara uygulanabilir.
public interface ITransactional { }
public record CreateOrderCommand(...) : IRequest<int>, ITransactional;
// where TRequest : ITransactionalDavranışlar Neden Ara Yazılımdan Daha İyidir?
HTTP ara yazılımından farklı olarak davranışlar mesaj başına çalışır, türü belirli istek ve yanıta erişir ve bir istek HTTP dışında gönderildiğinde de çalışır (ör. bir arka plan görevinden).
// Strongly typed, transport-independent cross-cutting logicHızlı Kontrol
Davranışların nasıl çalıştığını doğrulayın.
Özet
İşlem hattı davranışlarını öğrendiniz:
IPipelineBehavior<TRequest, TResponse>, her isteği ortak mantıkla sarar.nexttemsilcisi işlem hattını ilerletir; onu atlamak handler'ı kısa devreye alır.- Yaygın kullanımlar: günlükleme, doğrulama, işlemler ve önbelleğe alma.
- Davranışlar kayıt sırasına göre çalışır ve güçlü tür denetimine sahiptir.
Sırada: bildirimler ve olaylar.
Sıkça Sorulan Sorular
“İşlem Hattı Davranışları” dersi ücretsiz mi?
Evet — “İşlem Hattı Davranışları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“İşlem Hattı Davranışları” dersinde ne öğreneceğim?
Kesitsel mantığı davranışlarla ekleyin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“İşlem Hattı Davranışları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- CQRS Kavramları
- MediatR ile Komutlar ve İşleyiciler
- İşlem Hattı Davranışları
- Bildirimler ve Olaylar