The Three Pillars of Domain-Driven Design
source: Carlos Buenosvinos, Christian Soronellas, Keyvan Akbary in Domain-Driven Design in PHP
Domain-Driven Design is an approach for delivering software, and it's focused on three pillars:
-
Ubiquitous Language:
Domain Experts and software developers work together to build a common language for the business areas being developed. There's no us versus them; it's always us. Developing software is a business investment and not just a cost. The effort involved in building the Ubiquitous Language helps spread deep Domain insight among all team members.
-
Strategic Design:
Domain-Driven Design addresses the strategy behind the direction of the business and not just the technical aspects. It helps define the internal relationships and early warning feedback systems. On the technical side, strategic design protects each business service by providing the motivation for how an service-oriented architecture should be achieved.
-
Tactical Design:
Domain-Driven Design provides the tools and the building blocks for iterative software deliverable. Tactical design tools produce software that is not only correct, but that is also testable and less error prone.