Skip to content

discomco/go-cart

Repository files navigation

Macula

OUTLINE

DESCRIPTION

This SDK provides a basis for developing modular applications for EventSourcing/CQRS in Golang, using Purposeful Architecture.

MOTIVATIONS

  • 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

WHAT IS PURPOSEFUL ARCHITECTURE?

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)

STRUCTURE OF GO-CART Applications

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.

Command Sequence

CMD Sequence

Projection Sequence

PRJ Sequence

Query Sequence

QRY Sequence

UNIT OF DEPLOYMENT

Cartwheel Deployment

Cartwheel Deployment

Railroad Deployment

Railroad Deployment

DEVELOPING GO-CART Applications

Default Dependencies

The GO-CART SDK defaults to the use of these backend services:

On the Roadmap

We are aiming to implement drivers to integrate with

Setting up the local development environment

For local development, we recommend the compose-dev-stack.


usage:

git clone https://github.com/rgfaber/compose-dev-stack
./run-minimal.sh -d

Reference Implementation

We are working on training material, but for now, please check out the ./examples folder for reference implementations.

SOME REFERENCES

Releases

No releases published

Packages

No packages published

Languages