Architecture¶
bITdevKit applies clean architecture through modular vertical slices. Domain and application code depend only on inner layers. Infrastructure and presentation provide integrations and entry points.
High-level architecture map¶
flowchart TB
Presentation[Presentation]
Infrastructure[Infrastructure]
Application[Application]
Domain[Domain]
Presentation --> Application
Infrastructure --> Application
Infrastructure --> Domain
Application --> Domain
Layer responsibilities¶
Domain¶
- aggregates, entities, value objects, and typed IDs
- domain events, domain policies, and business rules
- no dependency on outer layers
Application¶
- commands, queries, handlers, DTOs, specifications
- orchestration through requester/notifier flows
- depends on domain, not on infrastructure
Infrastructure¶
- persistence, messaging transports, queue brokers, storage providers
- implements abstractions required by inner layers
- contains integration details and operational mechanics
Presentation¶
- minimal API endpoints, web-facing modules, console-facing features
- request/response mapping and endpoint composition
Modular vertical slices¶
A modular monolith can group each module's domain, application, infrastructure, and presentation code.
Module/
├── Module.Domain
├── Module.Application
├── Module.Infrastructure
└── Module.Presentation
A single host application can compose multiple modules without merging their layer boundaries.
Request flow in practice¶
sequenceDiagram
participant Client
participant Endpoint as Presentation Endpoint
participant Requester as IRequester
participant Handler as Application Handler
participant Domain as Aggregate
participant Repository as Repository / Provider
Client->>Endpoint: HTTP request
Endpoint->>Requester: SendAsync(command/query)
Requester->>Handler: Dispatch through behaviors
Handler->>Domain: Execute business logic
Handler->>Repository: Persist or query
Repository-->>Handler: Result
Handler-->>Requester: Result
Requester-->>Endpoint: Result
Endpoint-->>Client: HTTP response