EU TRATO MEUS ERROS CERTO?

MARCOS 25/09/2013 10:17:56
#429232
Bom dia!
Prezados colegas,
Estou com uma dúvida simples sobre [Ô]Tratamento de exceção[Ô]
Quando se trata de uma classe para acesso a dados (CRUD),independente
do modo como a classe foi criada,temos geralmente nesta classe métodos
tais como [Ô]Conectar[Ô],[Ô]Pesquisar[Ô],Deletar[Ô],etc...
Atualmente,nesta classe para tratar exceçõeseu faço o seguinte:

Se houver uma exceção (Erro), em um destes métodos que citei acima,eu

- Exibo a mensagem a mensagem para o usuário (Usando Msgbox)
- Armazeno a exceção num Log de erro.


Minhas dúvidas:

Em se tratando de uma classe especifica para acesso a dados(CRUD) como esta:

1.) é correto tratar os erros da classe nela mesmo,ou o melhor é lançar a exceção para um nível acima?

2.) O que eu faço hoje,ou seja exibir o erro para o usuário e armazenar num Log é o suficiente,ou
eu deveria tomar outras providências quando o erro ocorre neste tipo de classe?


Agradeço qualquer orientação
KERPLUNK 25/09/2013 10:21:35
#429233
1 - Depende da exceção, se for alguma exceção que pode ser [Ô]consertada[Ô] pelo usuário(tipo, [Ô]Quer mesmo sobrepor?[Ô]) então lance a exceção para exibir a message box
2 - Existem muitas exceções que podem ser tratadas pelo usuário, como o caso acima. Mas log, sempre é uma boa prática.

O maior truque e o mais difícil de entender, é que exceções não são booleans(erro/não erro), mas sim objetos complexos que podem conter muita coisa, ainda mais se usadas exceptions customizadas.
OCELOT 25/09/2013 10:29:35
#429235
Resposta escolhida
Se o programa é em camadas então você não pode misturar as camadas.

Se a camada é de acesso a dados então ela não deveria saber que existe uma UI, logo ela não deveria saber que existe um messagebox já que isso faz parte da UI, então ela deveria tratar o erro fazendo o que deve fazer, tipo fechar conexões e tudo mais que for necessário, salvar o erro no log e então lançar ele para quem chamou esta função para assim ele saber que ocorreu um erro e decidir o que deve fazer nesse caso.

Dependendo do erro pode não ser nem mesmo necessário gravar um log, se é algo que você já sabe que pode acontecer e que o programa vai tratar, como por exemplo um registro duplicado então não vejo necessidade de log disso
MARCOS 25/09/2013 12:04:30
#429253
Baseado no exposto pelos colegas Kerplunk e OCELOT,
Estou pensando em tirar a mensagem com Msgbox (Tirar,somente desta classe CRUD) a mensagem e manter o registro em Log.

Mas,minha principal dúvida ainda persiste:

Por exemplo:

1.) No método [Ô]Conectar[Ô] da classe ,quais as principais exceções devo tratar?

2.) No método [Ô]Pesquisar[Ô] da classe,qual as principais exceções?

3.)No método Deletar,qual a principal exceção?


Obs: Estou usando nesta classe CRUD o ADO.NET em todos os métodos
Tópico encerrado , respostas não são mais permitidas