The design patterns from Domain-Driven Design are gradually entering the collective consciousness of software developers. But most of the information out there focuses on mechanistic implementation details of the patterns: how to make an Entity in [insert favourite programming language], how to use the Repository pattern with [insert new hot ORM], how to make immutable Value Objects in [insert legacy framework]...
Applied individually, these patterns are useful, but are not giving you the full potential of Domain-Driven Design.
This one day training has a different approach. We address technical concerns in implementing the DDD patterns, but the focus is on the underlying principles and heuristics for building great domain-centric object-oriented code.
- Why you’re underusing Value Objects
- Seeing objects as containers of lifecycles and consistency
- Discovering deeper domain concepts such as business rules, and lifting them into first class domain objects
- The relevance of processes, behaviour, temporal modelling... for finding better Aggregate boundaries
- How mutable software designs have distorted our perception of mutability in the domain
- Better heuristics for understanding a complex domain, and using them to drive a more focused design
- Reducing our dependance on service classes
- Designing an implementation model that not only encapsulates the domain, but communicates that design to future programmers and reduces their surface area for bugs
This workshop, aimed at programmers, is designed to give you immediate benefits when modelling and implementing the most important parts of your codebase.
I was particularly impressed by Mathias Verraes. He gave a hands-on, in-depth workshop about Domain-Driven Design (DDD). Mathias focused on the underlying principles and heuristics for building great domain-centric object-oriented code. (Full testimonal: https://rombit.be/takeaways-full-stack-europe-2019-domain-driven-design/)
The workshop is programming-language agnostic. You are expected to have some experience working in an object-oriented language, and have some notions of object-oriented design patterns and principles.