However:
- The map is not the territory.
- Plans are worthless, but planning is everything.
- Understand all of this, but use only what you need.
- The actual architecture is
driven by the project requirements.
Infrastructure
User Interface
Web server
HTTP
SMS
Server
Command
Query BUS
Admin GUI
Views & Controllers
API
Controllers
Consumer GUI
Views & Controllers
Console
Commands
Application Core
Mailing
Server
Ports
Notiļ¬cations
<I>
EBus
<I>
CQBus
<I>
Commands
Services
<I>
Persistence
<I>
Search
App. Services
Domain Services
Domain
Model
Component
Event Listeners
C/Q Handlers
Application Layer
Event
BUS
Domain Layer
Primary/Driving Adapters
Secondary/Driven Adapters
CLI
Queries
ORM
Adapter
Search
Adapter
Email
Adapter
SMS
Adapter
Event BUS
Adapter
C/Q BUS
Adapter
Queue
Adapter
ORM
MySQL
Adapter
SQLite
Adapter
Message
Queue
Adapter
Message
Bus
Message
Queue
Queue
(ie. RabbitMQ)
Search Engine
(ie. Elasticsearch)
PRD DB
(ie. MySQL)
TST DB
(ie. SQLite)
Primary wrap around a
use case and adapt its input/output
to a delivery mechanism, ie.
HTTP/HTML, HTTP/JSON or CLI.
Secondary adapters wrap around a tool
and adapt its input/output to a port, which
fits the application core needs and can
simply be an interface or a complex set of
interfaces and objects.
Dependencies go inwards
3rd party apps
mobile apps
message queues
microservices
...
Platform managers
...
End-users
consumers
...
Technical users
cron jobs
...
Explicit Architecture
Aggregate/
Entities
Use
Cases