What is Domain Driven Design and Development?


Domain-Driven Design (DDD) is a collection of principles and patterns that help developers to take design decisions to develop elegant systems for different domains. It is not a technology or methodology.
The main components of DDD are: Entity, Value Object, Aggregate, Service and Repository.
Entity– An object that has an identity- it is unique within the system, like Customer, Employee etc.
Value Object– An object that has no identity within the system like Rate, State etc.
Note: A value object can become an entity depending on the situation.
Aggregate–¬†An aggregate root is a special kind of entity that consumers refer to directly. All consumers of the aggregate root are called as aggregate. The aggregate root guarantees the consistency of changes being made within the aggregate.
Service– A service is a way of dealing with actions, operations and activities within your application.
Repository– A repository is responsible to store and to retrieve your data. It is not a concern how and where data will be persist. So, it can be SQL server, oracle, xml, text file or anything else. Repository is not a Data Access Layer but it refers to a location for storage, often for safety or preservation.