Skip to content
bitzorcas
EN

Concept

Overview

Cross-cutting concerns in BitzOrcas — error handling, rate limiting, observability, audit pipeline, idempotency, health checks, caching, and background jobs.

Last updated

BitzOrcas addresses cross-cutting concerns through building blocks and middleware that every module benefits from automatically. Unlike frameworks that require per-module opt-in, BitzOrcas’s Mediator pipeline and middleware chain provide most cross-cutting behavior as transparent infrastructure.

Available cross-cutting features

FeatureImplementationStatus
Error handlingGlobalExceptionHandler + Result<T>✅ Implemented
Rate limitingASP.NET Core RateLimiter (3 policies)✅ Implemented
IdempotencyIdempotencyPipelineBehavior✅ Implemented
ObservabilityOpenTelemetry + OTLP✅ Implemented
Health checksAspire ServiceDefaults✅ Implemented
Audit pipelineChannel queue + async writer✅ Implemented
Background jobsQuartz.NET JobHost✅ Implemented
CachingIMemoryCache✅ Implemented
Feature flagsIFeatureStore (null default)📋 Planned
HTTP resiliencePolly/Retry📋 Planned
RealtimeIChatRealtimeAdapter📋 Planned

Mediator pipeline — the cross-cutting backbone

Most cross-cutting concerns are applied through the Mediator pipeline, ensuring every request automatically benefits:

Request → Logging → Authorization → Validation → Idempotency
→ Transaction → ActivityAudit → Handler

No per-endpoint configuration needed — pipeline behaviors are registered once and apply globally.

Middleware chain — request-level concerns

Request-level cross-cutting behavior is handled by the middleware pipeline in Program.cs:

ExceptionHandler → CorrelationId → Authentication → DelegationToken
→ TenantResolution → RequestAudit → Authorization → RateLimiter → Endpoints

Design philosophy

  • Convention over configuration: Most cross-cutting features work out-of-the-box
  • Null defaults: Every port has a null/default implementation — no infrastructure needed to start
  • AOT-compatible: API Host stays trim-safe; heavy dependencies (Quartz, SignalR) run in separate hosts
  • Configurable: Features can be toggled or configured via appsettings.json