We will describe a project's architecture that aims to have a design that let scale functionalities without too much accidental complexity. The architecture picks ideas from DDD and CQRS.
4. domain
• contexts
• modules
• application services
• value objects/aggregates
• interfaces for repositories and external services
• buses
• command bus
• oracle
• domain event publisher
5. infrastructure
• http rest api server
• rabbitmq workers
• key/value database
• relational database
• non blocking promises
6. libraries
• com.stuartsierra/component: managing the lifecycle and dependencies of software components which have runtime state
• co.paralleluniverse/pulsar: provides high-performance lightweight threads, Go-like channels, Erlang-like actors, and other
asynchronous programming tools
• prismatic/schema: declarative data description and validation
• funcool/catacumba: web toolkit
• com.taoensso/timbre: logging and profiling
• hikari-cp: high-performance JDBC connection pool
• slingshot: enhanced throw and catch for Clojure
• com.gearswithingears/shrubbery: mocking
• com.novemberain/langohr: RabbitMQ client
• com.taoensso/carmine: Redis client
15. • Stuart Sierra component
• lifecycle and dependencies management of runtime state
• rapid workflow
• component next
• adaptation of Stuart Sierra components map definition
• simplifiers
• bus handlers
• api rest routing
components