Once we have the data encapsulated in a request, it's time for the business logic. As Vaughn Vernon says: "Keep Application Services thin, using them only to coordinate tasks on the model."
The first thing to do is to extract the necessary information from the request, That is, the email
and password
. At a high level, we need to check if there's an existing user with a particular email. If this isn't the case, then we create and add the user to the UserRepository
. In the special case of finding a user with the same email, we raise an exception so the client can treat it their own way — by displaying an error, retrying, or just ignoring it:
namespace Lw\Application\Service\User; use Ddd\Application\Service\ApplicationService; use Lw\Domain\Model\User\User; use Lw\Domain\Model\User\UserAlreadyExistsException; use Lw\Domain\Model\User\UserRepository; class SignUpUserService { private $userRepository; public function __construct(UserRepository $userRepository...