Domain-Driven Design applies whenever we are operating in a complex, intricate domain. Make the software a reflection of the domain. The software needs to incorporate and express the core concepts and elements of the domain, and precisely realize the relationships between them.