bjetos de negócios, validação e exceçõ

Estou lendo algumas perguntas e respostas sobre exceções e seu uso. Parece ser uma opinião forte de que as exceções devem ser levantadas apenas para casos não tratados e de exceção. Isso me levou a pensar como a validação funciona com objetos de negócio

Digamos que eu tenha um objeto de negócios com getters / setters para as propriedades do objeto. Digamos que eu precise validar que o valor está entre 10 e 20. Essa é uma regra de negócios e, portanto, pertence ao meu objeto de negócios. Então isso parece implicar para mim que o código de validação está no meu setter. Agora eu tenho meu banco de dados da interface do usuário com as propriedades do objeto de dados. O usuário digita 5, portanto, a regra precisa falhar e o usuário não tem permissão para sair da caixa de texto. . A interface do usuário é vinculada à propriedade para que o setter seja chamado, verifique a regra e falhe. Se eu gerasse uma exceção do meu objeto de negócios para dizer que a regra falhou, a interface do usuário pegaria isso. Mas isso parece contrariar o uso preferido para exceções. Dado que é um levantador, você realmente não terá um "resultado" para o levantador. Se eu definir outro sinalizador no objeto, isso implicaria que a interface do usuário tivesse que verificar esse sinalizador após cada interação da interface do usuári

Então, como deve funcionar a validação?

Edit: Eu provavelmente já usei um exemplo simplificado aqui. Algo como a verificação do intervalo acima poderia ser manipulado facilmente pela interface do usuário, mas e se a validação fosse mais complicada, por exemplo, o objeto de negócios calcula um número com base na entrada e, se esse número calculado estiver fora do intervalo, deverá ser rejeitado. Essa é uma lógica mais complicada que não deve estar na interface do usuário.

Há também a consideração de outros dados inseridos com base em um campo já inserido. Por exemplo, preciso inserir um item no pedido para obter determinadas informações, como estoque disponível, custo atual, etc. O usuário pode solicitar que essas informações tomem decisões sobre outras entradas (por exemplo, quantas unidades serão solicitadas) ou podem ser necessárias para que para validação adicional a ser feita. Um usuário deve poder inserir outros campos se o item não for válido? Qual seria o objetivo?

questionAnswers(18)

yourAnswerToTheQuestion