Só tem uma questão com relação às mensagens enviadas para o Front-End. Em aplicações reais existe a possibilidade de haver tradução para outros idiomas, fazendo assim com que o envio de frases como está sendo ensinado dificultar mais do que facilitar a vida do Front-End (por experiência própria), então o ideal é enviar enums com o erro. Como assim?
Ao invés de enviar: "O campo não pode estar vazio" Enviar: "CAMPO_VAZIO"
O Front vai pegar esse enum e usar em um arquivo para traduzir a mensagem que provavelmente foi passada para ele pelo time de produto dentro dos arquivos necessários.