scorpio 7 Denunciar post Postado Abril 7, 2009 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
Oenning 0 Denunciar post Postado Abril 7, 2009 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
quintelab 91 Denunciar post Postado Abril 7, 2009 Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Windows Applications Compartilhar este post Link para o post Compartilhar em outros sites