How do you statically model an ever changing world? In this presentation we’ll look at the reality of doing DDD with Python (though many of the lessons extend to any dynamic language.) We’ll explore when and how dynamic language solutions are most appropriate for domain models, and discusses the trade-offs between flexibility, maintainability and performance in doing so. The talk is illustrated with experiences drawn from building industrial domain models in Python in the energy sector to support high performance computing applications.
Domain Driven Design (DDD) advocates the codification of “the real world” into a domain model, which is in turn realized as a software system around which valuable services can be constructed. The development of these domain models is a flowing conversation between domain experts, software developers, and other stakeholders, and it can involve constant discovery and many course changes. Likewise, 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 to their limits, and inflexible object models in statically typed languages such as Java or C#.