kepawni / twilted
A strictly typed PHP 7 CQRS/ES library/framework suited for PhpSpec and striving for highest IDE intellisense comfort
Requires
- beberlei/assert: ^3.2
- mathiasverraes/classfunctions: ^1.1
- ramsey/uuid: ^4.1
Requires (Dev)
- ext-xdebug: *
- phpspec/phpspec: ^6.1
README
CQRS and Event Sourcing—The Way I Like To Engineer Domains
Status
Concepts
Serializing instances
Instead of relying on PHP's built-in serialization format on the one hand or enforcing the use of a certain format like JSON (even if it is a wise option) on the other hand, we decided to use an own way of simplifying instances for storing them that doesn't get in your way too much but won't cause a lot of extra work either.
Immutability
It is important to eliminate side effects, which also means waving good-bye to setters. For configuring complex instances we use with…($value) methods that can be chained and always return a new instance.
Project structure
The core namespace \Kepawni\Twilted contains nothing but essential interfaces and an abstract class.
However, some basic convenience classes that can be used as an out-of-the-box solution can be found in \Kepawni\Twilted\Basic. These rely heavily on traits to cater for easy reuse while causing minimal coding.