Mensagens para regras de negócio

4 respostas
tiagowanke

Olá,

Gostaria de saber se alguém tem algum artigo/tutorial/exemplo de uma boa prática de como se trabalhar com mensagens para usuário relacionadas a regra de negócio.
Não estou falando de mensagens de validação de dado como “nome não informado”, mas sim de regra de negócio como “você não pode inserir duas pessoas com o mesmo nome”.

4 Respostas

FernandoFranzini

Boa pratica é usar objetos exception em nivel de camadas.

gomesrod

Um prática que adotei nos últimos projetos é criar uma classe para exceções de negócio contendo um atributo que é a chave da mensagem.

Fica mais ou menos assim:

Exceção
class BusinessException extends Exception {
      private String messageKey;

      BusinessException (String message, String messageKey) {
           // O primeiro parametro é a mensagem normal da exceçao...
           super(message);
           // O segundo é a chave da mensagem internacionalizada
           this.messageKey = messageKey;
      }
}
Camada de negócio:
if (existePessoaComMesmoNome) {
   throw new BusinessException("Ja existe uma pessoa com esse nome: " + nome, "message_jaExistePessoaComNomeCadastrado");
}
Camada de apresentação (controller);
try {
    servico.cadastrarPessoa(pessoa);
} catch (BusinessException be) {
    // be.getMessageKey() contem "message_jaExistePessoaComNomeCadastrado", que deve estar no resourcebundle da aplicaçao
    String mensagem = localizarNoResourceBundle (be.getMessageKey());
    exibirMensagemAoUsuario(mensagem);
}

Outra maneira é ter um outro resourcebundle na camada de negócio. Assim a mensagem já viria pronta para a camada de apresentação.

gomesrod

Revendo o post original não tenho certeza se entendi perfeitamente a dúvida…
se não tiver nada a ver com isso pode ignorar

tiagowanke

gomesrod,

Sua resposta tem a ver com a dúvida sim, muito obrigado.
A questão é que estou utilizando o pattern chain of responsibility e não achei nenhum exemplo desse pattern tratando mensagens para o usuário.
A cada chain ele chama a próxima (se existir) a ser executada, só que ai não posso lançar uma Exception senão não vai executar as “chains” até o fim, pois a exceção irá parar.

Não sei se fui claro, qualquer coisa posso colocar algum código de exemplo.

Criado 23 de abril de 2012
Ultima resposta 23 de abr. de 2012
Respostas 4
Participantes 3