Usuário com melhor resposta
Dúvida sobre Implementação de Regras de Negócio e Validações na camada BLL - C#

Pergunta
-
Olá amigos do fórum!
Já pesquisei em quase todos os fóruns e tutoriais na net, mas não encontro resposta para um minha dúvida sobre como implementar validações na camada BLL. Pelos exemplos que encontrei, as validações ocorrem na camada BLLmesmo com auxílio do Throw new Exception... Imagine que tivesse que Gravar uma Pessoa e o campo Cidade tivesse que ser obrigatório, caso o usuário não o passe, estoura um erro de exception na tela Horrível e sem tratamento de botões... O usuário pode se confundir e até encerrar a aplicação... Não achei interessante validar assim... Não acho funcional!
public class PessoaFisicaBLL { private readonly DAL.Repositoy.PessoaFisicaRepository _PessoaFisicaRepository = new DAL.Repositoy.PessoaFisicaRepository(); public String Salvar(PessoaFisicaDTO pPessoaFisicaDTO) { if (String.IsNullOrEmpty(pPessoaFisicaDTO.NomeCompleto)) { throw new Exception("O Campo Nome Completo deve ser preenchido."); } if (pPessoaFisicaDTO.NomeCompleto.Length > 100) { throw new Exception("O Campo Nome Completo deve conter no máximo 100 caracteres."); } if (pPessoaFisicaDTO.Pessoa.Regiao.IDCidade <= 0) { throw new Exception("O Campo ID Região deve ser informado."); } if (pPessoaFisicaDTO.Pessoa.PessoaTipo.IDPessoaTipo < 0) { throw new Exception("O Campo Tipo Pessoa deve ser informado."); } if (pPessoaFisicaDTO.Pessoa.PessoaSituacao.IDPessoaSituacao < 0) { throw new Exception("o campo situação pessoa deve ser informado."); } if (pPessoaFisicaDTO.Sexo.IDSexo < 0) { throw new Exception("O Campo Sexo deve ser informado."); } return _PessoaFisicaRepository.Salvar(pPessoaFisicaDTO); } }
Não tem uma forma mais agradável de retornar um messageBox agradável ao usuário e não prosseguir enquanto ele não corrigir o problema, em vez de gerar uma exception horrorosa e nada funcional?
Me desculpem, sou leigo no assunto e gostaria muito de aprender e compartilhar ideias... Alguém sabe como me ajudar?
Abraço!!
Respostas
-
Você tem muita razão, essa parte é a pior ao meu ver!
Você pode usar desse link: https://github.com/netdragoon/ddd-validation as classes de validação que acredito ser melhor ... em vez desse monte e ifs ai você só vai fazer assim com auxilio dessa classe:
public String Salvar(PessoaFisicaDTO pPessoaFisicaDTO) { AssertionConcern.AssertArgumentNotEmpty(pPessoaFisicaDTO.NomeCompleto, "O Campo Nome Completo deve ser preenchido.")); AssertionConcern.AssertArgumentLength(pPessoaFisicaDTO.NomeCompleto, 1, 100, "O Campo Nome Completo deve conter no máximo 100 caracteres.")); ....... // assim por diante return _PessoaFisicaRepository.Salvar(pPessoaFisicaDTO); }
Se ele não der nenhum throw é porque foi salvo, mas, se der você trata isso:
try { PessoaFisicaBLL bll = new PessoaFisicaBLL(); bll.save( ... ); } catch(Exception ex) { //Messagem aqui .... }
Fulvio C
- Editado Fulvio Cezar Canducci Dias segunda-feira, 14 de dezembro de 2015 20:03
- Marcado como Resposta Jalber Romano terça-feira, 15 de dezembro de 2015 14:54
Todas as Respostas
-
Você tem muita razão, essa parte é a pior ao meu ver!
Você pode usar desse link: https://github.com/netdragoon/ddd-validation as classes de validação que acredito ser melhor ... em vez desse monte e ifs ai você só vai fazer assim com auxilio dessa classe:
public String Salvar(PessoaFisicaDTO pPessoaFisicaDTO) { AssertionConcern.AssertArgumentNotEmpty(pPessoaFisicaDTO.NomeCompleto, "O Campo Nome Completo deve ser preenchido.")); AssertionConcern.AssertArgumentLength(pPessoaFisicaDTO.NomeCompleto, 1, 100, "O Campo Nome Completo deve conter no máximo 100 caracteres.")); ....... // assim por diante return _PessoaFisicaRepository.Salvar(pPessoaFisicaDTO); }
Se ele não der nenhum throw é porque foi salvo, mas, se der você trata isso:
try { PessoaFisicaBLL bll = new PessoaFisicaBLL(); bll.save( ... ); } catch(Exception ex) { //Messagem aqui .... }
Fulvio C
- Editado Fulvio Cezar Canducci Dias segunda-feira, 14 de dezembro de 2015 20:03
- Marcado como Resposta Jalber Romano terça-feira, 15 de dezembro de 2015 14:54
-