Temiz Mimaride Çapraz Kesilen Endişeleri Dengeli Tutma
Temiz Mimaride Çapraz Kesilen Endişeleri Dengeli Tutma
Çapraz kesen endişeler, uygulamayı etkileyen yazılım unsurlarıdır. Bunlar, birden fazla katmanı ve seviyeyi kapsayan genel uygulama düzeyindeki işlevselliklerdir. Çapraz kesen endişeler, kod tekrarını ve bileşenler arasındaki sıkı bağlantıyı önlemek amacıyla bir yerde merkezileştirilmelidir.

source image url
- Kimlik doğrulama ve yetkilendirme
- Günlükleme ve izleme
- İstisna yönetimi
- Doğrulama
- Önbellekleme
Bugünkü bültenimde, Temiz Mimaride çapraz kesen endişeleri nasıl entegre edeceğinizi size göstereceğim.
Temiz Mimaride Çapraz Kesilen Endişeler
Temiz Mimaride, çapraz kesen endişeler, sistemizin bakımını ve ölçeklenebilirliğini sağlamada önemli bir rol oynar. İdeal olarak, bu endişelerin çekirdek iş mantığından ayrı bir şekilde ele alınması gerekir. Bu, Temiz Mimarideki prensiplerle uyumludur ve endişelerin ve modülerliğin ayrılmasını vurgular. Çekirdek iş kurallarınız karmaşık olmaktan uzak durur ve mimari temiz ve adapte edilebilir kalır.
İdeal olarak, çapraz kesen endişeleri Altyapı katmanında uygulamak istersiniz. ASP.NET Core middleware, dekoratörler veya MediatR pipeline davranışları gibi araçları kullanabilirsiniz. Hangi yaklaşımı seçerseniz seçin, rehberlik eden fikir aynı kalır.

source image url
Hadi bakalım, günlükleme (logging), doğrulama (validation) ve önbellekleme (caching) gibi çapraz kesen endişeleri nasıl uygulayacağımıza bir göz atalım.
Çapraz Kesilen Endişe #1 — Günlükleme
Günlükleme, yazılım geliştirmenin temel bir yönüdür ve bir uygulamanın davranışına bakmanızı sağlar. Hata ayıklama, uygulama sağlığını izleme ve kullanıcı etkinliklerini ile sistem anormalliklerini takip etme açısından hayati öneme sahiptir. Temiz Mimaride, günlükleme endişelerinin ayrılmasını koruyacak şekilde uygulanmalıdır.
Bunu başarmanın zarif bir yolu, MediatR’nin IPipelineBehavior’ı ile sağlanır. Günlükleme mantığını bir boru hattı davranışının içine encapsulate ederek, günlükleme işlemini iş mantığından ayrı bir endişe olarak ele alırız. Bu yaklaşım, uygulama içinden geçen istekler hakkında detaylı bilgileri yakalamamızı sağlar.
Etkili günlükleme tutarlı, bağlam zengini ve müdahaleci olmamalıdır. Serilog’un yapılandırılmış günlükleme yeteneklerini kullanarak, bilgilendirici olmanın yanı sıra kolayca sorgulanabilir günlükler oluşturabiliriz. Bu, uygulamanın herhangi bir anındaki durumunu anlamak için temeldir.
Doğru yapıldığında, yapılandırılmış günlükleme, çekirdek mantığı karmaşık hale getirmeden uygulamanız hakkında değerli bilgiler sağlar. Bunlar, ayrıntı ve netlik dengesi sağlayarak, günlüklerinizin gürültü kaynağı değil, yardımcı bir araç olmasını sağlar.
using Serilog.Context;
internal sealed class RequestLoggingPipelineBehavior<TRequest, TResponse>(
ILogger<RequestLoggingPipelineBehavior<TRequest, TResponse>> logger)
: IPipelineBehavior<TRequest, TResponse>
where TRequest : class
where TResponse : Result
{
public async Task<TResponse> Handle(
TRequest request,
RequestHandlerDelegate<TResponse> next,
CancellationToken cancellationToken)
{
string requestName = typeof(TRequest).Name;
logger.LogInformation(
"Processing request {RequestName}",
requestName);
TResponse result = await next();
if (result.IsSuccess)
{
logger.LogInformation(
"Completed request {RequestName}",
requestName);
}
else
{
using (LogContext.PushProperty("Error", result.Error, true))
{
logger.LogError(
"Completed request {RequestName} with error",
requestName);
}
}
return result;
}
}
Çapraz Kesen Endişe #2 — Doğrulama
Doğrulama, yazılım mühendisliğinde kritik bir çapraz kesen endişedir. Sisteminize yanlış verilerin girmesine karşı ilk savunma hattını oluşturur. Doğrulama, uygulamayı tutarsız veri durumlarına ve potansiyel güvenlik açıklarına karşı korur.
Aşağıdaki örnekte, bir doğrulama boru hattı davranışı oluşturuyorum. Bu yapı, doğrulama mantığını iş mantığından temiz bir şekilde ayırmanıza olanak tanır. Boru hattı davranışı, her isteğin çekirdek işleme mantığına ulaşmadan önce doğrulandığından emin olur.
Doğrulama yaklaşımına yaklaşırken, iki türü ayırt etmek önemlidir:
- Giriş doğrulaması
- İş kuralı doğrulaması
Giriş doğrulaması, verinin doğruluğunu ve formatını kontrol eder (örneğin, dize uzunluğu, sayı aralıkları ve tarih formatları gibi), işlemeye geçmeden önce temel kriterleri karşıladığından emin olur.
Diğer taraftan, iş kuralı doğrulaması, verinin alanınızın özel kurallarına ve mantığına uygun olup olmadığını sağlamakla ilgilidir.
Etkili doğrulama uygulamaları, bir uygulamanın direncine ve güvenilirliğine önemli ölçüde katkıda bulunur. Doğrulama kurallarını zorlayarak, yüksek veri kalite standardını sürdürebilir ve daha iyi bir kullanıcı deneyimi sağlayabilirsiniz.
internal sealed class ValidationPipelineBehavior<TRequest, TResponse>(
IEnumerable<IValidator<TRequest>> validators)
: IPipelineBehavior<TRequest, TResponse>
where TRequest : class
{
public async Task<TResponse> Handle(
TRequest request,
RequestHandlerDelegate<TResponse> next,
CancellationToken cancellationToken)
{
ValidationFailure[] validationFailures = await ValidateAsync(request);
if (validationFailures.Length != 0)
{
throw new ValidationException(validationFailures);
}
return await next();
}
private async Task<ValidationFailure[]> ValidateAsync(TRequest request)
{
if (!validators.Any())
{
return [];
}
var context = new ValidationContext<TRequest>(request);
ValidationResult[] validationResults = await Task.WhenAll(
validators.Select(validator => validator.ValidateAsync(context)));
ValidationFailure[] validationFailures = validationResults
.Where(validationResult => !validationResult.IsValid)
.SelectMany(validationResult => validationResult.Errors)
.ToArray();
return validationFailures;
}
}
Çapraz Kesilen Endişe #3: Önbellekleme
Önbellekleme, yazılım geliştirmede temel bir çapraz kesen endişedir. Temel olarak performansı artırmayı ve ölçeklenebilirliği hedefler. Önbellekleme, veriyi geçici olarak hızlı erişim katmanında depolamayı içerir. Bu, aynı bilgiyi tekrar tekrar getirme veya hesaplama ihtiyacını azaltır.
Aşağıda gördüğünüz önbellekleme boru hattı davranışı, Cache Aside desenini uygular. Bu desen, isteği işlemeden önce önbelleği kontrol etmeyi ve gerektiğinde önbelleği yeni verilerle güncellemeyi içerir. Bu desen, basitliği ve etkinliği nedeniyle popüler bir önbellekleme stratejisidir. Bu bağlantıda bu nasıl uygulandığını görmek isterseniz bir video öğretici bulabilirsiniz.
Önbellekleme uygularken şu unsurları göz önünde bulundurmak önemlidir
- Ne Önbelleğe Alınmalı: Hesaplanması veya alınması maliyetli ve önbelleğe alınabilecek kadar istikrarlı olan verileri belirleyin.
- Önbellek Geçersiz Kılma: Önbelleğe alınan verilerin ne zaman ve nasıl geçersiz kılınması gerektiğini belirleyin.
- Önbellek Yapılandırma: Önbellek ayarlarını, süre dolma ve boyut gibi, uygun bir şekilde yapılandırın.
Etkili önbellekleme, yanıt sürelerini iyileştirir ve sistem üzerindeki yükü azaltarak, ölçeklenebilir .NET uygulamaları inşa etmek için kritik bir stratejidir.
internal sealed class QueryCachingPipelineBehavior<TRequest, TResponse>(
ICacheService cacheService,
ILogger<QueryCachingPipelineBehavior<TRequest, TResponse>> logger)
: IPipelineBehavior<TRequest, TResponse>
where TRequest : ICachedQuery
where TResponse : Result
{
public async Task<TResponse> Handle(
TRequest request,
RequestHandlerDelegate<TResponse> next,
CancellationToken cancellationToken)
{
TResponse? cachedResult = await cacheService.GetAsync<TResponse>(
request.CacheKey,
cancellationToken);
string requestName = typeof(TRequest).Name;
if (cachedResult is not null)
{
logger.LogInformation("Cache hit for {RequestName}", requestName);
return cachedResult;
}
logger.LogInformation("Cache miss for {RequestName}", requestName);
TResponse result = await next();
if (result.IsSuccess)
{
await cacheService.SetAsync(
request.CacheKey,
result,
request.Expiration,
cancellationToken);
}
return result;
}
}
Sonraki adımlar, belirli hedeflerinize ve yazılım geliştirme projesinin bağlamına bağlıdır. Ancak, genel öneriler şunlardır:
Çapraz kesen endişeleri yönetmek, günlükleme, önbellekleme, doğrulama ve istisna yönetimi gibi konuları sadece teknik uygulama ile ilgili değildir. Bu, bu yönleri Temiz Mimarilik prensipleriyle uyumlu hale getirmekle ilgilidir. Tartıştığımız ayrıştırma tekniklerini benimseyerek, .NET projelerinizin sağlam ve bakımı kolay olmasını sağlayabilirsiniz.
Çapraz kesen endişelerin işlenmesini geliştirmeye yönelik attığınız her adım, daha iyi bir yazılım mimarisine doğru atılmış bir adımdır. Bu stratejileri kendi .NET projelerinizde denemenizi teşvik ederim. Bu konularda detaylı bir rehber arıyorsanız, Pragmatik Temiz Mimarili’ne bir göz atın.
Unutmayın, yazılım geliştirmenin güzelliği sürekli evrimde ve sürekli iyileştirmenin kararlı takibindedir.
메타데이터
- post_id
- b8c70c5ce574
- slug
- temiz-mimaride-çapraz-kesilen-endişeleri-dengeli-tutma-b8c70c5ce574
- url
- https://mediumturkiye.com/temiz-mimaride-%C3%A7apraz-kesilen-endi%C5%9Feleri-dengeli-tutma-b8c70c5ce574
- canonical_url
- https://mediumturkiye.com/temiz-mimaride-%C3%A7apraz-kesilen-endi%C5%9Feleri-dengeli-tutma-b8c70c5ce574
- author_url
- https://medium.com/@codezone
- status
- ok
- fetched_at
- 2026-07-24 09:38:12