Application Services are the middleware between the outside world and the Domain logic. The purpose of such a mechanism is to transform commands from the outside world into meaningful Domain instructions.
Let's consider the User signs up to our platform use case. Starting with an outside-in approach: from the delivery mechanism, we need to compose the input request for our Domain operation. Using a framework like Symfony as the delivery mechanism, the code would look something like this:
class SignUpController extends Controller { public function signUpAction(Request $request) { $signUpService = new SignUpUserService( $this->get('user_repository') ); try { $response = $signUpService->execute(new SignUpUserRequest( $request->request->get('email'), $request->request->get('password') )); } catch (UserAlreadyExistsException $e) { return...