Domain Driven Design
"The heart of software is its ability to solve domain-related problems for its user?" (Eric Evans)
In a software development project, it is vital for developers to understand the problem domain in order to abstract it in an understandable and potent domain model in the software. Therefore, developers, domain experts and users need to speak a common language. These are principal ideas of Domain-Driven Design. Ideally, code is aligned with the reality of the problem. This requires conversations with users and domain experts. Using certain building blocks and a well separated layering in the software is the key to get maintainable and understandable code. Also, while new developers understand the code, they will also understand the (abstraction of) the problem domain.
Domain-Driven Design – Motivation
Domain-Driven Design is a family of software and architecture patterns and best practices. It is also a process that aligns the code with the reality of the problem domain and keeps developers and domain experts working together. It has proven to be really helpful when you want to write maintainable software for a problem space that has a certain complexity. So if you need to build software that is strategically relevant for your business – and that is likely to change and evolve over time – you should be familiar with the ideas and building blocks of Domain-Driven Design.
A software that is modeled close to the real problem domain is much easier to grow and adapt with it: In fact, the difficulty in adding new features remains constant and relatively small. And if the solution is properly broken apart along bounded context lines, it is easy to extract parts of it into microservices for example.
Domain-Driven Design goes hand in hand with “Clean Code” and Hexagonal Architectures and in your hands-on trainings we integrate these approaches and tell from the experience we have from real project implementations. Furthermore, DDD increases security (security by design) and testability of your software a lot.
Training goals and concepts
The training starts with a reflection on common challenges in software development and where DDD practices are appropriate to address these challenges.
Then we give an overview of tactical DDD building blocks and patterns and provide practical implementation knowledge. In order for you to be able to follow the training well, we use a sample domain, which we follow step by step and discuss practical code examples (in Golang).
After the training you are prepared to:
1. Introduction to DDD
2. Introducing the example domain "Hackerando"
3. Application Architecture: Benefits of a “technology free domain model”, separation of concerns and typical layerings, concept of "ports and adapters" and hexagonal architecture
4. Tactical Patterns Overview and Building Blocks
5. Design Patterns
6. Implementing DDD
HR & AOE Academy Strategy Lead