Back to 2015-proposals
Title: Deliver Domain Driven Designs. Dynamically!
Proposer: Austin Bingham
Proposer: Robert Smallshire
Type: Workshop
Duration: 360 mins
Description:
How do you statically model an ever changing world? The approach of Domain Driven Design (DDD)
describes the codification of perspectives of reality into a domain model, which is in turn realized as a
software system around which valuable services can be constructed. As business and physical domains
evolve, our requirements, models and implementations must follow if they are to remain relevant.
Dynamic languages such as Python are a great match for the dynamism of the real world. It is perhaps
surprising then, that for much of the decade since its inception, DDD has manifested its results in rigid
relational database schemas, object relational mappers pushed beyond reasonable limits, and inflexible
object models in statically typed languages such as Java or C#.
In this hands-on workshop, participants will work together to implement a domain model in Python using
nothing more that plain-old-Python objects . We’ll show how core DDD concepts such as entities,
immutable value objects, aggregates and repositories can be implemented in Python. We’ll build
declarative tools from scratch to facilitate model implementation, and we’ll develop a simple but
powerful event-sourcing system for persistence. Along the way we’ll discover some useful properties of
dynamic languages when it comes to making supple designs which are testable, extensible,
customisable, and configurable into the future, understanding how bounded contexts and pluggable
subdomains can ease the delivery and maintenance of large models.
Up front, we provide a domain, a vision, a ‘ubiquitous language’, and Python development tools. We’ll
work hard together as a class to implement a small, but complete and robust, model over the course of
one day, and we’ll put it to work in a simulation.