Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

scorpio

Throw

Recommended Posts

Pessoal, qual a vantagem de usar o Throw para lançar uma exceção personalizada?

 

Por exemplo:

Public Class DescricaoObrigatoria
	Inherits System.Exception
	Public Sub New()
		MyBase.New("Descrição da atividade é obrigatória!")
	End Sub
End Class


Private Sub Gravar(ByVal sDescricao As String)
		Try
			If (sDescricao = "" Or sDescricao = Nothing) Then
				Throw New DescricaoObrigatoria()
			End If
			DataBase.IncluirAtividade(sDescricao, Me.FormatoData)
			MessageBox.Show("Atividade incluída", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information)
		Catch ex As DescricaoObrigatoria
			MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
		Catch ex As Exception
			MessageBox.Show("Erro ao gravar registro." & vbNewLine & ex.Message)

		End Try
	End Sub

Esse mesmo código eu poderia fazer assim:

 

Private Sub Gravar(ByVal sDescricao As String)
		Try
			If (sDescricao = "" Or sDescricao = Nothing) Then
				MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
				Exit Sub
			End If
			DataBase.IncluirAtividade(sDescricao, Me.FormatoData)
			MessageBox.Show("Atividade incluída", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information)
		Catch ex As Exception
			MessageBox.Show("Erro ao gravar registro." & vbNewLine & ex.Message)

		End Try
	End Sub

 

Na primeira maneira acho que o código fica mais fácil, mais simples. Se tivesse um monte de verificações a serem feitas acho que seria a melhor foma.

Mas isso não quer entrar na minha cabeça. Não deve ser só isso com certeza deve ter mais coisas, não é mesmo ?

 

 

 

 

Até mais!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você faz um sistema em camadas, a camada de UI (Interface) vai sempre mostrar Message.Box (WinForms) ou Alert (Web).

 

A vantagem de você criar exceptions é que você pode fazer um tratamento diferenciado para cada uma delas, veja um exemplo (C#, pois não manjo de VB.NET)

 

try
{
 DataBase.ExecutaQuery("UDPATE tabela SET campo = 1 WHERE id = 2");
}
catch (SqlException)
{
   //Opa, deu um erro no Sql!
}
catch (Exception)
{
  //Ocorreu algum erro que não é Sql.
}

No seu caso você criou a exception DescricaoObrigatoria, não é preciso, você poderia usar a exception que já existe no .Net Framework, assim:

throw new ArgumentException("Descrição Obrigatória");

Bom, eu sou da opinião que exceção deve ser tratado com uma exceção, apenas para tratar erros de programação, parâmetros inválidos etc. Agora se você quer saber se o cara digitou algo errado ou não, faça um bom if ... else ... mesmo.

 

Espero ter ajudado :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.