Skip to content

Pattern Library

A catalogue of design patterns used in the Granit framework, organized by category.

Each pattern documents the general concept, how it is implemented in Granit, and references to the actual source files where the pattern is applied.

PatternDescription
Module SystemTopological loading with [DependsOn]
Hexagonal ArchitecturePorts and Adapters for infrastructure decoupling
Layered ArchitectureDomain / Application / Infrastructure separation
Middleware PipelineDual ASP.NET Core + Wolverine pipeline
Event-DrivenIDomainEvent (local) + IIntegrationEvent (durable)
REPRMinimal API Request-Endpoint-Response
CQRSIReader / IWriter separation, ArchUnitNET enforcement
Anti-Corruption LayerIsolation of Keycloak, S3, Brevo, FCM via internal DTOs
PatternDescription
Multi-Tenancy3 isolation strategies, soft dependency, async propagation
Feature FlagsMulti-level resolution Tenant to Plan to Default
Transactional OutboxAtomic event publishing via Wolverine Outbox
IdempotencyStripe-style HTTP idempotency with state machine
Pre-Signed URLDirect-to-cloud S3 upload/download
Sidecar / BehaviorContext propagation via Wolverine Behaviors
Circuit Breaker and RetryStandard resilience + Wolverine RetryWithCooldown
Cache-AsideDouble-check locking + HybridCache L1/L2
Rate LimitingPer-tenant rate limiting with dynamic quotas
Saga / Process ManagerGDPR export, import/export orchestrators
Fan-OutWolverine cascade for notifications and webhooks
Claim CheckSoft dependency IClaimCheckStore for large payloads
Bulkhead IsolationQueue isolation, parallelism, tenant quotas
PatternDescription
StrategyTenantIsolationStrategy, IBlobKeyStrategy, IStringEncryptionProvider
Chain of ResponsibilityTenantResolverPipeline, blob validation
CommandSendWebhookCommand, RunMigrationBatchCommand
Template MethodGranitModule lifecycle, GranitValidator
State MachineIdempotencyState, BlobStatus
Observer / EventWolverine implicit event subscription
MediatorWolverine message bus
Null ObjectNullTenantContext, NullCacheValueEncryptor
PatternDescription
Factory MethodVaultClientFactory, DbContext tenant factories
SingletonAsyncLocal singletons, NullTenantContext.Instance
BuilderFluent AddGranit*() extensions
PatternDescription
AdapterTypedKeyCacheServiceAdapter, S3BlobClient
DecoratorDistributedCacheService, CachedLocalizationOverrideStore
ProxyFilterProxy for EF Core, Interceptors
FacadeDefaultBlobStorage, GranitExceptionHandler
CompositeAuditable entity hierarchy
PatternDescription
RepositoryStore interfaces + EF Core / InMemory implementations
Soft DeleteISoftDeletable + SoftDeleteInterceptor (GDPR)
Data FilteringIDataFilter with ImmutableDictionary AsyncLocal
Unit of WorkImplicit DbContext + interceptor chain
SpecificationQueryDefinition whitelist-first, expression trees
PatternDescription
Scope / Context Managerusing pattern for context restoration
Copy-on-WriteImmutableDictionary for thread-safe state
Double-Check LockingAnti-stampede on cache miss
PatternDescription
Expression TreesDynamic EF Core query filter construction
Marker InterfaceISoftDeletable, IMultiTenant, IDomainEvent
Options Pattern93 Options classes, ValidateOnStart
PatternDescription
Claims-Based IdentityJWT Keycloak + dynamic RBAC
Guard ClauseSystematic fail-fast, semantic exceptions
PatternDescription
Granit Variants10 hybrid patterns unique to Granit