Book Image

Domain-Driven Design with Java - A Practitioner's Guide

By : Premanand Chandrasekaran, Karthik Krishnan
Book Image

Domain-Driven Design with Java - A Practitioner's Guide

By: Premanand Chandrasekaran, Karthik Krishnan

Overview of this book

Domain-Driven Design (DDD) makes available a set of techniques and patterns that enable domain experts, architects, and developers to work together to decompose complex business problems into a set of well-factored, collaborating, and loosely coupled subsystems. This practical guide will help you as a developer and architect to put your knowledge to work in order to create elegant software designs that are enjoyable to work with and easy to reason about. You'll begin with an introduction to the concepts of domain-driven design and discover various ways to apply them in real-world scenarios. You'll also appreciate how DDD is extremely relevant when creating cloud native solutions that employ modern techniques such as event-driven microservices and fine-grained architectures. As you advance through the chapters, you'll get acquainted with core DDD’s strategic design concepts such as the ubiquitous language, context maps, bounded contexts, and tactical design elements like aggregates and domain models and events. You'll understand how to apply modern, lightweight modeling techniques such as business value canvas, Wardley mapping, domain storytelling, and event storming, while also learning how to test-drive the system to create solutions that exhibit high degrees of internal quality. By the end of this software design book, you'll be able to architect, design, and implement robust, resilient, and performant distributed software solutions.
Table of Contents (17 chapters)
1
Part 1: Foundations
4
Part 2: Real-World DDD
12
Part 3: Evolution Patterns

Who this book is for

This book was written with a diverse set of roles and skills in mind. While the concepts of DDD have been in existence for a long time, practical application and scaling have been a challenge, arguably due to a dearth of practical techniques, tools, and real-world examples that bring all these concepts together as a cohesive whole. Successful application of these principles requires strong collaboration from a varied set of roles and disciplines across an organization, including executives, business experts, product owners, business analysts, architects, developers, testers, and operators.

Here is a quick summary of reader personas and what they will gain from reading this book:

Executives and business experts should read this book so that they can articulate their vision and the core concepts that justify the need for the solution. Techniques will allow them to do this in an expedient manner and also gain empathy toward what it takes to implement changes quickly and reliably.

Product owners should read this book so that they can act as effective facilitators when communicating with both business and technical team members, making sure that there is no loss in translation.

Architects should read this book so that they gain an appreciation of the fact that it is of utmost importance to understand the problem before thinking of a solution. They will also gain an appreciation of various architecture patterns and how they play in conjunction with DDD principles.

Developers and testers will be able to put their knowledge to work with this practical guide to create elegant software designs that are easy and pleasant to work with and reason about.

The book provides a hands-on approach to gathering requirements effectively, promoting a shared understanding among all team members in order to implement solutions that will be able to withstand the test of a dynamically evolving business ecosystem.