Last updated at 05 January 2019 | Published at 14 March 2018
BaseAggregateRoot has now been removed and all the traits have
been collapsed into one. This trait has been moved to the root namespace.
- Multiple interactions and intermediate persisting of aggregates now has correct versioning of messages.
- Code generation now handles types and type aliases better.
- symfony/yaml now allows ^3.2|^4.0
AggregateRootRepositoryis now an interface. The default implementation is the
Eventinterface is removed. A new
SerializableEventinterface is provided to aid the default serializers. If you use the default serializers your events must implement this interface. The methods are the same as the
Eventinterface, so effectively it’s an in-place replacement.
CodeDumperis changed to ensure code now implements the
AggregateRootTestCasenow allows you to overwrite the
aggregateRootRepositorymethod for if/when you have a custom implementation and still want all the benefits of the default test tooling.
- The Header::AGGREGATE_ROOT_ID is no longer converted to string in the default decorator but in the serializer.
- The Header::AGGREGATE_ROOT_ID_TYPE is now set in the serializer.
CodeDumpernow generated prettier code.
PointInTimerelated properties of the
Eventinterface are removed. The
DefaultHeadersDecoratornow ensures all events receive a
AggregateRootnow keeps track of a version, the
ConstructionBehaviourtrait has been updated to reflect this and shows how it’s implemented.
AggregateRootTestCasenow requires you to implement the
newAggregateRootIdmethod to be able to return a stable aggregate root id from the
MessageDispatcherChainis introduced to be able to chain multiple dispatchers together. This allows users to compose a dispatching system that combined synchronous and a-synchronous message handling.
BaseAggregateRootbehaviour is now extracted into traits so you can choice to implement certain concerns yourself without overriding methods.