Domain Driven Design (DDD) is an approach to software development that focuses on modeling a domain and implementing software that reflects that model. The domain model is a rigorous organization of knowledge about a domain that is agreed upon by both domain experts and technical people. It is expressed using a ubiquitous language that is consistently used throughout all discussions and documentation about the domain. The domain model forms the basis of the software design, with the implementation expressing the model. Key building blocks of the domain model include entities, value objects, services, and modules. Entities have identity while value objects do not. Services contain application logic without state, and modules break up the domain model into cohesive subdomains.