John graduated in engineering science from New College, Oxford University. His first job after university was the development of a technique and tools for calibration of parallel robots. Since then, he has worked as a consultant software developer across a broad range of organisations and domains. Through this experience, he developed an interest in the design of software systems and the development of human process. Like many others, John felt something was not entirely satisfied by the classical approach to domain modelling. He decided to try event modelling, and to accumulate his learning across client work by making an open-source Python library for event-sourcing. After four years of refactoring and improvements, conditioned by developers around the world, the library now offers stable building blocks for creating event-sourced domain driven designs.
Abstract:
This talk presents design patterns for event-sourced and distributed systems, using examples in Python. If programming is the act of deciding now what will happen in the future, then we must pay attention to events. But although pattern language was originally intended to describe patterns of events, it happened that events did not figure prominently in either Eric Evans' book of patterns for Domain Driven Design or Martin Fowler's Patterns of Enterprise Application Architecture. By considering "what happens" both in a domain model and during event processing, the building blocks of domain driven design and enterprise systems can be reworked in terms of events.
The Python eventsourcing library offers a convenient way to code event sourced aggregates and applications, in which state is determined by a sequence of domain events. Furthermore, the library's implementation of the process event pattern makes it possible to program reliable event processing systems independently of any particular database infrastructure or way of running the system. By designing both the domain events and the process events, we can fully determine what happens when a system is running. This talk has three parts: part 1 shows how to make a domain model with event-sourced aggregates; part 2 shows how to make an application with an event-sourced domain model; and part 3 shows how to make a reliable distributed system from a set of event-sourced applications.
Resources: