Functional Aggregate Design: Processes, Temporality & Automata Theory
In the last years more and more practitioners of Domain-Driven Design agree that Aggregates should be rather viewed as processes that have an inherent temporal aspect to them. Very often they are mentioned as life-cycles that can adapt their behavior over time.
Aggregates are then defined as a combination of Commands (stimuli from the environment), Behaviors (reactions to incoming stimuli that can change the system’s state & response mechanisms) and Events (system signals in response to changes in state).
Modelling processes is nothing new in computing though. Automata theory can give us some mathematical foundations with which we can formally design our Aggregates in a purely functional and composable way.
In this talk I will explain why we need process-oriented models, and which concepts from automata theory can help us in deriving a functional and temporal design for our Aggregates. We will also explore some operations that enable compositions on these models like unions and projections. The talk will be accompanied by concrete code examples showing how such Aggregates could look like in real-world scenarios.
- About Thomas Ploch
Infinite State Machine @ FlixBusTwitterLinkedInBlog
I am Thomas, and I design systems for people and computers for fun and profit!
My career has navigated me through various industries like Finance & Insurance, Medical, Automotive and Travel. I have been wearing many differently shaped hats over the last 15 years. From System Administration, Test Automation, Web Development, Software Architecture & Design, Product Design & Organisation Design, I can draw on a bit of experience that currently helps me every day as a Principal Solutions Architect FlixBus.
The biggest realization over the last few years is that the most important component of success is not running the latest distributed architecture in the cloud, but to enable people to work smart to manifest their ideas in helpful products. I want to share my experiences and hope that you can take away a bit of knowledge that can help you later.
It is impossible to design useful software without understanding the underlying forces driven by market conditions, competitors, business strategy and the actual people using or building the software. Hence, I firmly believe that a wider definition of system design is required to achieve an adaptive and evolvable environment of people, processes and technology that can react to changing conditions in our fast paced digital world.