J'apprends le DDD et je pense à lancer des exceptions dans certaines situations. Je comprends qu'un objet ne peut pas entrer dans un mauvais état, donc ici les exceptions sont bien, mais dans de nombreux exemples, des exceptions sont également lancées, par exemple si nous essayons d'ajouter un nouvel utilisateur avec un courrier électronique existant dans la base de données.
public function doIt(UserData $userData)
{
$user = $this->userRepository->byEmail($userData->email());
if ($user) {
throw new UserAlreadyExistsException();
}
$this->userRepository->add(
new User(
$userData->email(),
$userData->password()
)
);
}
Donc, si l'utilisateur avec cet e-mail existe, nous pouvons intercepter une exception dans le service d'application, mais nous ne devons pas contrôler le fonctionnement de l'application à l'aide du bloc try-catch.
Quelle est la meilleure façon de procéder?