Domain-driven design (DDD) is an approach that involves using a shared domain model and ubiquitous language to support complex domains and ensure alignment between software design and business needs. It emphasizes basing the software design on an evolving model that shares common concepts with domain experts. DDD uses patterns like entities, value objects, aggregates and repositories to structure the software around domain concepts and separate domain logic from data access and external interfaces.