zend expressive meets prooph
You're viewing an example application showing you how well PSR-7 middleware can play together with CQRS and EventSourcing.
And you're ask to try it yourself. Proophessor Do includes exercises! So read on and pick up a task!
prooph is an organisation developing and supporting CQRS and Event-Sourcing infrastructure for PHP environments. You can learn more about it by reading the official prooph guide.
This repository contains an example implementation of a small domain model served by a PHP web application flavoured with client side JavaScript to keep the UI and the Backend focused on what they can best.
- PHP 5.5+
- PSR-7 middleware layer based on zend-expressive
- IoC Container: zend-servicemanager v2.6+ with container-interop support
- Routing: Aura.Router
- Templates: zend-view
- Separate write and read model following the CQRS approach by Greg Young
- Communication from and to the domain layer is handled by prooph/service-bus
- Event sourced write model is powered by prooph/event-sourcing
- Domain events are persisted in a prooph/event-store using one of the adapters:
- Read model persistence is managed with the help of Doctrine DBAL
- Value Object implementations are graped from nicolopignatelli/valueobjects
- Interop. factories using sandrokeil/interop-config
- Assertions - well, you know it
- Layout is graped from http://bootswatch.com which is based on bootstrap
- User interaction is handled with riot.js
- User input is validated with validate.js
- Commands are sent to the server using jQuery.ajax
- Server messages are presented by notify.js
- JavaScript UUID generator taken from https://gist.github.com/duzun/d1bfb5406a362e06eccd
- Little helpers: lodash.js and undersocre.string.js
The business logic implemented in this educational project is very simple and should be known by everybody in one way or the other. It is about managing todo lists for users whereby a todo can have a deadline and the assigned user can add a reminder to get notified when time has passed.
Please refer to the installation instructions.
When you play around with the application you will notice missing functionality. This has a simple reason. You explore a learning application and what is the best way to learn? Right! Learning by doing! So if you want to learn something about CQRS and Event Sourcing:
- Pick up an open task listed below
- Get us a note in the corresponding issue that you accept the challenge
- Ask if you need help ->
- Have fun and learn!
Note: Some tasks depend on others and some can be split into sub tasks. Let's discuss this in the issues. And of course you can also work together. Sharing work doubles knowledge!
A successfully merged pull request will add you to the HALL OF FAME!
- Project set up, register user, post todo - done by people at prooph
- Mark a todo as done - done by [your name here]
- Reopen a todo - done by [your name here]
- Add deadline to todo - done by [your name here]
- Add reminder for assignee - done by [your name here]
- Mark a todo as expired - done by [your name here]
- Notify assignee when todo deadline is expired - done by [your name here]
- Notify assignee when reminder time is reached - done by [your name here]
- more features will follow ...
- Ask questions on prooph-users mailing list.
- File issues at https://github.com/prooph/proophessor-do/issues.
- Say hello in the prooph gitter chat.
Happy messaging!