All Projects → jetbasrawi → Go.cqrs

jetbasrawi / Go.cqrs

Licence: mit
A Golang reference implementation of the CQRS pattern.

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Go.cqrs

les
Go directly from an event storming to a working API: Event Markdown / Markup validation & NodeJS CQRS/ES application builder.
Stars: ✭ 48 (-77.67%)
Mutual labels:  eventsourcing, cqrs-es
eventsourcing-go
Event Sourcing + CQRS using Golang Tutorial
Stars: ✭ 75 (-65.12%)
Mutual labels:  eventsourcing, cqrs-es
chekov
A CQRS/ES framework for building application in Rust
Stars: ✭ 21 (-90.23%)
Mutual labels:  eventsourcing, cqrs-es
Todomvc Ddd Cqrs Eventsourcing
Implementation of basic Todo app via tastejs/todomvc in C#/Typescript with eventsourcing, cqrs, and domain driven design
Stars: ✭ 134 (-37.67%)
Mutual labels:  eventsourcing, cqrs-es
Jivejdon
Jivejdon is a Domain Driven Design appication with CQRS/ES/Clean/Hexagonal architecture
Stars: ✭ 287 (+33.49%)
Mutual labels:  eventsourcing, cqrs-es
delta
DDD-centric event-sourcing library for the JVM
Stars: ✭ 15 (-93.02%)
Mutual labels:  eventsourcing, cqrs-es
nota
"None Of The Above" - is going to be a secure online voting system, intended to give the electorate better choices. It always adds one additional choice to anything to be voted on: If more than 50% of voters choose "None of the Above", the election is considered null and void.
Stars: ✭ 17 (-92.09%)
Mutual labels:  eventsourcing, cqrs-es
Eshoponcontainersddd
Fork of dotnet-architecture/eShopOnContainers in full DDD/CQRS design using my own patterns
Stars: ✭ 126 (-41.4%)
Mutual labels:  eventsourcing, cqrs-es
Go Cqrs All
All-in-one collection for Go CQRS / ES / DDD examples
Stars: ✭ 39 (-81.86%)
Mutual labels:  eventsourcing, cqrs-es
Eventflow
Async/await first CQRS+ES and DDD framework for .NET
Stars: ✭ 1,932 (+798.6%)
Mutual labels:  eventsourcing, cqrs-es
Neventlite
NEventLite - An extensible lightweight library for .NET that manages the Aggregate lifecycle in an Event Sourced system. Supports Event and Snapshot storage providers like EventStore/Redis or SQL Server. Built with dependency injection in mind and seamlessly integrates with AspNetCore.
Stars: ✭ 117 (-45.58%)
Mutual labels:  cqrs-es
Frp Eventsourcing
Functional Reactive Programming in Event Sourcing Systems
Stars: ✭ 117 (-45.58%)
Mutual labels:  eventsourcing
Goes
Go Event Sourcing made easy
Stars: ✭ 144 (-33.02%)
Mutual labels:  eventsourcing
Event Sourcing Jambo
An Hexagonal Architecture with DDD + Aggregates + Event Sourcing using .NET Core, Kafka e MongoDB (Blog Engine)
Stars: ✭ 159 (-26.05%)
Mutual labels:  cqrs-es
Marten
.NET Transactional Document DB and Event Store on PostgreSQL
Stars: ✭ 1,654 (+669.3%)
Mutual labels:  eventsourcing
Booster
Booster Cloud Framework
Stars: ✭ 136 (-36.74%)
Mutual labels:  cqrs-es
Bifrost
This is the stable release of Dolittle till its out of alpha->beta stages
Stars: ✭ 111 (-48.37%)
Mutual labels:  eventsourcing
Kitsvc
⚙ 一個基於 Golang、Consul、Prometheus、EventStore、Gin、Gorm、NSQ 的微服務起始結構。
Stars: ✭ 101 (-53.02%)
Mutual labels:  eventsourcing
Quiz
Example real time quiz application with .NET Core, React, DDD, Event Sourcing, Docker and built-in infrastructure for CI/CD with k8s, jenkins and helm
Stars: ✭ 100 (-53.49%)
Mutual labels:  eventsourcing
Liiklus
Reactive (RSocket/gRPC) Gateway for the event-based systems
Stars: ✭ 192 (-10.7%)
Mutual labels:  eventsourcing

Go.CQRS license Go Report Card GoDoc

A Golang CQRS Reference implementation

Go.CQRS provides interfaces and implementations to support a CQRS implementation in Golang. The examples directory contains a sample application that demonstrates how to use Go.CQRS.

As much as possible Go.CQRS has been designed with the principles of CQRS espoused by Greg Young which represents the best thinking on the topic.

CQRS Pattern vs CQRS Framework

CQRS is an architectural pattern. When implementing the CQRS pattern, it is easy to imagine how the code could be packaged into a framework. However, it is recommended that those working with CQRS focus on learning the underlying detail of the pattern rather than simply use a framework.

The implementation of the CQRS pattern is not especially difficult, however it is a steep learning curve because the pattern is very different to the traditional non CQRS architecture. Topics such as Aggregate Design are very different. If you are going to use EventSourcing and eventual consistency then there is a lot of learning to be done.

If you are new to CQRS or simply interested in best practices there is a great 6 hour video of a hands-on CQRS workshop by Greg Young.

Once the pattern is understood, implementations such as Go.CQRS can be used as a reference for learning how to implement the pattern in Golang and also as a foundation upon which to build your CQRS implementation.

What does Go.CQRS provide?

Feature Description
Aggregate AggregateRoot interface and Aggregate base type that can be embedded in your own types to provide common functions required by aggregates
Event An Event interface and an EventDescriptor which is a message envelope for events. Events in Go.CQRS are simply plain Go structs and there are no magic strings to describe them as is the case in some other Go implementations.
Command A Command interface and an CommandDescriptor which is a message envelope for commands. Commands in Go.CQRS are simply plain Go structs and there are no magic strings to describe them as is the case in some other Go implementations.
CommandHandler Interface and base functionality for chaining command handlers
Dispatcher Dispatcher interface and an in memory dispatcher implementation
EventBus EventBus interface and in memory implementation
EventHandler EventHandler interface
Repository Repository interface and an implementation of the CommonDomain repository that persists events in GetEventStore. While there are many generic event store implementations over common databases such as MongoDB, GetEventStore is a specialised EventSourcing database that is open source, performant and reflects the best thinking on the topic from a highly experienced team in this field.
StreamNamer A StreamNamer interface and a DelegateStreamNamer implementation that supports the use of functions with the signiature func(string, string) string to provide flexibility around stream naming. A common way to construct a stream name might be to use the name of your BoundedContext suffixed with an AggregateID.

All implementations are easily replaced to suit your particular requirements.

Example code

The examples folder contains a simple and clear example of how to use go.cqrs to contruct your service. The example is a port of the classic reference implementation m-r by Greg Young.

Getting Started

    $ go get github.com/jetbasrawi/go.cqrs

Refer to the example application for guidance on how to use Go.CQRS.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].