Sto imparando DDD e sto pensando di lanciare eccezioni in determinate situazioni. Comprendo che un oggetto non può entrare in un cattivo stato, quindi qui le eccezioni vanno bene, ma in molti esempi le eccezioni vengono lanciate anche per esempio se stiamo provando ad aggiungere un nuovo utente con l'e-mail esistente nel database.
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()
)
);
}
Quindi, se esiste un utente con questa e-mail, nel servizio dell'applicazione possiamo rilevare un'eccezione, ma non dovremmo controllare il funzionamento dell'applicazione utilizzando il blocco try-catch.
Qual è il modo migliore per questo?