a Rails app using advanced DDD concepts
Application with CQRS and Event Sourcing built on Rails and Rails Event Store
Nothing special found.
Nothing special found.
A non-trivial application with DDD, CQRS and Event Sourcing built on Rails and Rails Event Store.
Event storming (events and commands) - Miro documentation
Domains exist in directories starting at ecommerce.
ecommerce/
├── crm
├── inventory
├── invoicing
├── ordering
├── payments
├── pricing
├── processes
├── product_catalog
├── shipping
└── taxes
(almost) Each one has a README introduction:
Order management application lives at rails_application directory.
This application simulates a process of managing orders.
We start with a list of exiting products, customers and coupons (populated with seeds).
The customer perspective is "simulated" only - via using the select box.
Read models live at the application level. In our case it's in the Rails app:
There's a process manager responsible for dealing with the process of
expiring orders.
It takes the following events as the input:
- Ordering::OrderSubmitted
- Ordering::OrderExpired
- Ordering::OrderConfirmed
- Payments::PaymentAuthorized
- Payments::PaymentReleased
When certain conditions are met the process manager return a
ReleasePayment
command.
Another process manager is responsible for confirming order.
It does it, when a successful payment is detected.
This project has several high-level goals:
We welcome all the contributors here.
As you see, this project is not an usual Rails project.
Many Rails conventions are not followed here. Usually there's a good reason for that.
Trust us, but feel free to challenge our decisions.
Code comments
Do not leave comments in the code by default. Just leave an GitHub issue instead of a TODO comment for example.
Technical debt
One of the goals of this project is educational - to show how to implement certain features with DDD.
As such we treat the actual code as business value.
That's why (as opposed to "normal" projects") we can treat technical debt as part of the "backlog".
Whenever you add a temporary hack to the codebase, add a Github issue - maybe someone else will be able to help or clean.
When you work on certain are and see some not pretty code - fix it or create an issue and add the "debt" label.
Backlog
If you're somehow experienced with ecommerce (even when not as a dev) - your experience can help us.
Please create new Github issues with features that can exist in typical ecommerces.
Our goal is to cover as many features as possible - especially the tricky ones.
If you're a developer working on ecommerce and you want to learn how to implement a specific feature - feel free to add this as a ticket too.
All tickets should bring business value and be consistent with previous features.
It's fine to create vague tickets at the beginning and let them be more specific later.
Local setup
As for the local dev setup:
make install
should simplify a lotmake dev
Bundler note
Please check that your bundler version is not ancient, and up to date. For more details check:
git show 6dc6e1c2ea833e1ea5821cc9bc9bd5dfadbfda9a
which explains the problem and proposes a solution.
A sign that you have a problem will be unusual changes in Gemfile.lock
i.e. changes in remote sources and placement of gems definitions.
Things worth knowing about:
There's a Discord server connected with RailsEventStore and with this Ecommerce project.
Feel free to join here to ask questions or discuss the vision.
Over time we have developed a number of DDD-related online courses. We now sell them as part of one membership access via arkademy.dev.