- Macula
This SDK provides a basis for developing modular applications for EventSourcing/CQRS in Golang, using Purposeful Architecture.
- as a Software Engineering Manager
- I require a way to normalize the software manufacturing process
- so that software creation becomes a predictable, repeatable and scalable activity, both in velocity and quality
- as a Software Architect
- I want to be able to provide a unified approach to solving non-functional requirements
- and empower software engineers with tools that minimize boilerplate code
- and offer tools that normalize the software manufacturing process
- in order to provide a consistent level of quality
- and achieve a predictable manufacturing process
- as a Software Engineer
- I require a set of base artifacts and patterns
- so I will be able to focus on implementing business logic
- and not have to worry about non-functional requirements
- and can avoid to implement recurring boilerplate code
Purposeful Architecture is an architectural style, that is derived from Screaming Architecture, with a strong focus on communicating the intent of the application to all stakeholders.
Additionally, it builds on the concept of Inverted Architecture and relies heavily on composition, internal decoupling and reactive design.
This results in a very modular codebase that offers great flexibility in the choice of Unit of Deployment.
GO-CART applications can be deployed as either Modular Monoliths (Cartwheel deployment) or Micro Services (Railroad deployment) and we are investigating options for serverless deployment as well. (OpenFaaS)
This SDK produces applications that are modular, based on reactive (behavior-centric) design, immutable architecture (Event Sourcing/CQRS) and choreography. This means that these applications implement a process logic, rather than just "dumb" data-structures and that there are two different models in play: the behavioral (write) model, that identifies events and commands and the static (read) model that represents the data structures. Event Storming has proven to be a useful technique for discovering behavior, while Domain Driven Design is best fit for discovering the static model. Additionally, such applications need to implement three data-flows: COMMANDS, PROJECTIONS and QUERIES.
The GO-CART SDK defaults to the use of these backend services:
We are aiming to implement drivers to integrate with
For local development, we recommend the compose-dev-stack.
usage:
git clone https://github.com/rgfaber/compose-dev-stack
./run-minimal.sh -d
We are working on training material, but for now, please check out the ./examples folder for reference implementations.