Domain-driven design (DDD): what it is and its building blocks