Architecture Overview
Layer model
DAF follows a layered architecture where each module has a corresponding Abstractions companion:
βββββββββββββββββββββββββββββββββββββββββββ
β Your Application β
βββββββββββββββββββββββββββββββββββββββββββ€
β Application β Hosting β MediatR β β Composition
ββββββββββββ¬βββββ΄βββββββ¬βββββ΄βββββ¬βββββββββ€
β Logging β Config β DI β NNLog β β Services
ββββββββββββ΄ββββββββββββ΄ββββββββββ΄βββββββββ€
β Commons Β· Rtti Β· Threading β β Foundation
βββββββββββββββββββββββββββββββββββββββββββ
Abstractions pattern
Every service module ships as a pair:
| Package | Role |
|---|---|
Daf.X.Abstractions |
Interfaces only β no implementation |
Daf.X |
Concrete implementation + registration helpers |
Your app code depends only on Abstractions. Implementations are swappable at composition root.
Dependency flow
Application
βββ Hosting
βββ DependencyInjection
βββ Configuration
βββ Logging
βββ NNLog (provider)
Testing with MiniSpec
MiniSpec is independent of the rest of the stack. It can test any Delphi code using Gherkin-style specs:
Feature('Calculator')
.Scenario('Add two numbers')
.Given('a calculator')
.When('I add 2 and 3')
.Then('the result is 5');See the MiniSpec module for the full guide.