Home Artigos Fórum Dicas O Grupo Downloads Contato FAQ Parcerias Links

w
Ata da 2ª Reunião

wAta da 3ª Reunião
wAta da 4ª Reunião
 

Ata da 2ª Reunião do Grupo DevASP.NET
Realizada no último dia 26 de Julho do ano de 2003


1) Padrões para desenvolvimento em camadas:

1.2) Tratamentos de erros :

Trabalhando em um sistema em camadas precisamos controlar adequadamente os erros de negócio que possam ocorrer dentro dos componentes. Uma das formas documentadas para fazermos isso é devolvermos status de dentro dos componentes. Mas isso muitas vezes se torna algo não recomendável. Isso porque dá liberdade ao programador da interface de ignorar status de erro ou simplesmente esquecer de trata-lo. Por causa disso a melhor forma de lidar com erros de negócio é disparando um erro personalizado de dentro dos componentes, o que faz com que o client seja obrigado a tratar os erros.

A forma padrão de disparo de erros no .NET é a seguinte :
Throw new Exception("Deu um erro qualquer") Porém isso ainda não é um padrão adequado para erros de negócio.

Isso porque o tratamento seria genérico demais. Veja como seria o tratamento :
Try Catch er as exception End Try

Em um catch como o acima qualquer excessão será capturada, tornando o tratamento genérico e difícil de ser realizado. Para piorar a classe exception não possui um constructor que aceite um código de erro. Consequentemente a identificação de que erro ocorreu teria que ser realizada pelo texto, o que dificulta ainda mais a identificação do erro. Podemos, claro, criar classes de erro personalizadas. Mas se para cada erro de negócio formos criar uma classe de erro personalizada o desenvolvimento se tornará inviável. Então precisaremos criar uma classe de erros de negócio única que possa ser utilizada em toda a aplicação. Para isso precisaremos que esta classe nos permita distinguir entre os diversos erros de negócio que poderão ocorrer, nos deixando utilizar um código para cada erro de negócio. Essa classe ficaria desta forma :

Public Class ErroNegocio Inherits system.Exception Private cod as int64 Public Property CodigoErro() as int64
Get
return(cod)
End Get
Set (value as int64)
cod=value
End Set
End Property Public Sub New(ByVal NumErro as Int64,Byval MSG as String)
Mybase.New(MSG)
CodigoErro=NumErro
End Sub
End Class

Em minha opinião esta metodologia é uma metodologia básica para disparo de erros em sistemas em camadas. Podemos, porém, aperfeiçoar esta metodologia ainda mais. Já trabalhei em um sistema no qual solicitaram que, devido ao tamanho do sistema, as mensagens utilizadas pelo sistema fossem bem documentadas, sendo cadastradas em um banco de dados e recuperadas no momento em que fosse necessário exibi-las. Esse cadastramento gera uma flexibilidade ao sistema, permitindo que todas as mensagens do sistema possam ser facilmente personalizadas. Claro que nem todos os sistemas precisam disso, mas sem dúvida pode ser um recurso interessante para alguns casos. Então vamos planejar o que esta classe deveria conter : - Deve herdar a classe Erro negócio citada anteriormente - O constructor deverá receber apenas o código do erro, pois a mensagem será obtida do banco de dados.

- Precisaremos de uma propriedade para receber a string de conexão. Deverá ser uma propriedade Shared, pois assim será possível configurar a string de conexão uma única vez durante o uso do sistema.

- Precisaremos de um atributo privado que deverá guardar a mensagem que será recuperada do banco.
- Teremos alguma dificuldade com o constructor e a mensagem. O constructor precisa chamar o new da classe base em sua primeira linha. E esse new precisa receber uma mensagem. A solução para isso é transmitir uma mensagem qualquer, "xxx". Mas podemos fazer o override da propriedade Message e devolver através dela o atributo privado que contém a mensagem de banco. Com isso temos uma metodologia que pode ser considerada padrão na geração de erros de negócio no ambiente .NET.

1.3) Criação de componentes de negócio :

Quando criamos um sistema em camadas desejamos reutilizar a camada de negócios para diversos clients, tal como client Web e client Windows Forms.

O client Web, porém, possui características personalizadas. Por exemplo, os componentes de validação. Os componentes de validação geram um padrão para a exibição de mensagens de erro para o usuário do site. É interessante mantermos esse padrão mesmo quando trabalhamos em camadas, com componentes de negócio. Quando utilizamos componentes de negócio as validações encontram-se dentro do componente. Então a forma que temos para integrar as mensagens destas validações é através do uso do Custom Validator, pois o custom validator pode disparar o componente no servidor, realizando a validação. Porém se os dados forem válidos o fato de estarmos disparando o método do custom validator pode fazer com que a operação em questão já seja executada, o que nem sempre é interessante. Para solucionarmos isso pode ser interessante mantermos um padrão na codificação de nossos métodos :

Se temos um método para fazer a tarefa x, podemos dividi-lo em 2 : ValidarX e FazerX.
Com essa divisão as aplicações ASP.NET podem disparar o ValidarX através de um custom validator, com o objetivo de validar a realização da tarefa X e
depois, através do evento click de um botão disparar o FazerX. Aplicações Windows Forms, porém, não precisam desta separação. Então aplicações Windows Forms podem fazer uso de um WebService que agregue as duas chamadas de método em sequencia. Lembrando ainda que a chamada de
WebServices através de Windows Forms favorece a criação de SmartClients.

Assim sendo está divisão dos métodos é um padrão possível para a criação de camadas de negócio que sejam reutilizáveis entre ambiente web e windows e se adaptem a cada um dos dois ambientes. Assuntos não técnicos Precisamos de um voluntário para estudar as design patterns no .NET, cujo documento foi disponibilizado no site BufaloInfo, e realizar uma apresentação sobre esse assunto para todos em nossa próxima reunião.


2) Assuntos não técnicos:

  • Nosso site começará a entrar no ar na 2a feira com conteúdo textual. Mas é interessante criarmos algumas aplicações em ASP.NET para nosso site - Gerenciamento de FAQ onde possamos cadastrar as perguntas e respostas mais comuns em nosso grupo
  • Gerenciamento de atas de reunião, onde possamos cadastrar atas de nossas reuniões, como essa.
  • Que a próxima reunião seja realizada em horário noturno