Back to [[conference:committee:2015-proposals]]\\ \\ **Title**: Deliver Domain Driven Designs. Dynamically!\\ **Proposer**: [[2015:Austin Bingham]]\\ **Proposer**: [[2015: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.\\ \\ \\ \\