Domain driven design
24 January 2020
updated at: 6 November 2026
Domain driven design
Domain-driven design (DDD) is an approach to application development based on identifying domains and modeling software around them.

Domain
A domain is the area of knowledge or activity for which an application is developed. Lawyers clearly have their own terms and key concepts that differ from the vocabulary of the oil and gas industry. These are not just words: they reflect processes and relationships that matter to the customer. That is why it is important to pay attention to the terms used in a given field. This is achieved through constant communication between the two sides: the application developers and the customers. This approach reflects the main principle of DDD: development should not be detached from business goals. DDD is not a set of instructions or a methodology but a collection of principles and guidelines.
For small, simple software products, DDD, like other architecture design principles, is less important. But narrow domains with complex specifics require careful thinking at the highest level. DDD suggests creating domain models that capture complex business logic.
Model
A model is a system of abstractions that describes selected characteristics of a domain. Just as a physical model makes an object easier to understand and study, a domain model helps solve problems related to that domain.
Domain modeling
Domain modeling is a software development technique, used in particular in domain-driven design (DDD), for representing the core concepts, rules, and relationships of a specific business domain.
Aggregate
An aggregate is a cluster of entities and value objects with clearly defined boundaries that is treated as a single unit. Each aggregate has a root entity, and the outside world interacts with the aggregate only through this root. For example, an order with its order lines can form one aggregate: you do not change an order line directly but ask the order to add or remove it, so the order can enforce its rules, such as a maximum total.
Service
A domain service is an operation that does not naturally belong to any single entity or value object. Roughly speaking, it is a standalone action, such as transferring money between two accounts.
Repositories
A repository provides access to aggregates through a simple, collection-like interface: you can add an aggregate, find it by its identifier, or remove it, without knowing how and where it is stored. For example, an order repository lets the application load and save orders while hiding the details of the database.
Using domain-driven design when designing software architecture and complex enterprise information systems can make it easier to manage changes in a project and to test new releases more effectively.