Components of Domain-driven Design