Imagine designing a ride-sharing app for autonomous vehicles, let’s call it Autonomo. It would need to integrate information from both vehicle owners and their vehicles’ availability as well as from riders requesting and completing rides. It would need to be a real-time streaming app with high consistency and availability, and low latency and great user experience. How would you design and build such an app? In this talk, we’ll explore both a recently-developed design methodology called Event Modeling and a novel event-based software architecture called the Domain Functions architecture. We’ll dig into the intersection of Event Modeling, Event Sourcing and CQRS, streaming apps and services, and the ideas behind the Domain Functions architecture. Motivated by use-cases from Autonomo, we’ll explore some of this architecture’s tradeoffs and benefits, including:
- A functional programming take on Event Sourcing and CQRS that sidesteps the complexities of object-oriented DDD such as Aggregates and Sagas
- The ability to translate an Event Model directly into working software using either an Event-based or a State-based approach to data storage and processing
- The complete separation of the pure business domain logic from the complexities of distributed systems concerns like data transmission and storage, enabling both:
- A truly reusable streaming application platform capable of running many different apps and services
- Freeing line of business developers from battling distributed systems problems, and instead focusing exclusively on the logic of their business domain
- The ability to re-use the business logic both server-side in APIs and stream processing apps as well as client-side in Web and Mobile UIs!