Arquivos

Arquivo para a categoria ‘Artigos Técnicos’

LINQ to Entities e Entity Framework

29 de setembro de 2009 Comentários desligados

Seguem alguns artigos interessantes sobre o assunto:

Apresentando LINQ to Entities (Entity Framework)
http://www.macoratti.net/08/09/lnq_ent1.htm

Introdução ao ADO.NET Entity Framework
http://www.linhadecodigo.com.br/Artigo.aspx?id=1834

ADO .NET Entity Framework – Usando LINQ to Entities
http://www.macoratti.net/08/10/adn_lnqe.htm

Melhorias ao Entity Framework 4.0
http://pontonetpt.com/blogs/nunogodinho/archive/2009/08/06/improvements-in-entity-framework-4-0-pt-en.aspx

Abraços!

LINQ e LINQ to SQL

29 de setembro de 2009 Comentários desligados

Pra quem não conhece LINQ e o LINQ to Sql seguem alguns artigos interessantes sobre o assunto:

O Projeto LINQ
http://msdn.microsoft.com/pt-br/library/bb308959.aspx

Apresentando LINQ – Language Integrated Query
http://www.macoratti.net/07/12/net_linq.htm

Apresentando LINQ To SQL
http://www.macoratti.net/07/12/vbn5_lqs.htm

Introdução LINQ to SQL
http://imasters.uol.com.br/artigo/7156/bancodedados/introducao_linq_to_sql/

Usando LINQ To SQL
http://www.macoratti.net/07/12/vbn8_lq1.htm

Linq to Sql (REST IN PEACE?)
http://alcateiadigital.blogspot.com/2009/03/linq-to-sql-rest-in-peace.html

LINQ to SQL – 5 Minute Overview
http://www.hookedonlinq.com/LINQtoSQL5MinuteOverview.ashx

Abraços!

ASP.NET

29 de setembro de 2009 Comentários desligados

Seguem alguns links interessantes para quem está iniciando os estudos em ASP.NET.

Definição do ASP.NET
http://pt.wikipedia.org/wiki/ASP.NET

Site Oficial
http://www.asp.net/

Iniciando em .NET
http://forum.wmonline.com.br/index.php?showtopic=160558

Centro de desenvolvimento de ASP.NET
http://msdn.microsoft.com/pt-br/asp.net/default.aspx

Desenvolvendo para Web
http://www.desenvolvendoparaweb.net/

Codificando.net
http://comunidade.codificando.net/

w3schools
http://www.w3schools.com/ASPNET/default.asp

Júlio Battisti
http://www.juliobattisti.com.br/tutoriais/

Israel Aece
http://www.israelaece.com/

Macoratti
http://www.macoratti.net/

Imasters
http://imasters.uol.com.br/secao/aspnet/

Abraços!

Extensions Methods

15 de março de 2009 Comentários desligados

Tecnologias

  • Framework 3.5
  • C# 3.0

MSDN

Introdução

Olá pessoal, hoje vou falar um pouco sobre essa novidade do C# 3.0 que são os Extension Methods. Minha motivação para escrever esse artigo foi uma discussão que tive com alguns colegas de trabalho sobre a padronização da utilização desse recurso e quando utilizar ou não o mesmo.

Os Extension Methods permitem que o desenvolvedor adicione métodos a um determinado tipo sem a necessidade de alterar o código fonte original ou criar tipos derivados. Os métodos que são adicionados têm as mesmas características de um método estático, porém, a utilização dos mesmos funciona como se eles fossem métodos de instância. Esse recurso foi largamente utilizado para disponibilizar os métodos que trabalham com LINQ na versão mais recente do framework .net.

Definição

A definição é relativamente simples, para criar um extension method siga os seguintes passos:

  1. Crie um arquivo de código.
  2. Defina uma classe estática.
  3. A classe deve estar em um namespace acessível para os clientes.
  4. Defina um método estático com o primeiro argumento sendo do tipo que você pretende estender, antes do tipo adicione a palavra “this”.
  5. Escreva o corpo do método.

Ao final, você terá algo semelhante à imagem 01:

String.ToInt32.jpg
Imagem 01

Como podem ver na linha 1, defini que minha classe ficaria no namespace System, fiz isso por que a classe String também está nesse namespace, logo, quem estiver usando a classe também terá acesso ao método ToInt32.

Na linha 3 defini a classe StringExtensions como sendo pública e estática. Você pode usar o nome que quiser para a classe.

Dica
Eu adotei um padrão onde o nome da classe estática fica sendo sempre o tipo que estou estendendo seguido da palavra Extensions.

Na linha 5 declarei o método estático ToInt32, vocês podem reparar que a grande diferença aqui é a utilização da palavra this antes do primeiro parâmetro do método. O método tem que ter no mínimo um parâmetro sendo do tipo que você pretende estender.

Vejam como ficou a utilização do método na imagem 02:

Program_1.jpg
Imagem 02

Como vimos, a utilização do método fica bem prática, como se o mesmo fosse de instância, e não estático.

Quando utilizar?

Apesar de ser um método estático, o mesmo será utilizado como um método de instância, logo, o ideal é utilizar esse recurso quando faça sentido que o método seja utilizado assim.

Vale a pena utilizar esse recurso, pois a sintaxe fica bem mais limpa do que um método utilitário normal.

Program_2.jpg
Imagem 03

A imagem 03 possibilita a comparação entre a utilização convencional, e da utilização do extension method.

Dica
Métodos auxiliares nem sempre são bons candidatos a serem extension methods, exemplos de métodos que não deveriam utilizar esse recurso: FormatarCpf(), FormatarCnpj(), EhEmailValido(). Nesses casos, continue utilizando os métodos estáticos convencionais no padrão de assistente.

Organização dos arquivos

A organização dos arquivos é um ponto crucial para trabalhar em projetos com vários desenvolvedores. Quando usamos extensions podemos confundir o time de desenvolvimento já que os métodos não ficam junto com a definição do tipo, logo, use um padrão que fique bem explícito que o projeto usa esse recurso.

Arquivos.jpg
Imagem 04

A imagem o4 mostra como organizei os arquivos do projeto de exemplo, notem que existe uma pasta específica para Extensions, onde ficam os métodos para tipos do sistema, como string, int, etc. No caso da interface IPessoa, seus métodos ficam em um arquivo de mesmo nome com sufixo “.sufixo”.

Dica
Defina o padrão que atende melhor as necessidades do projeto e da equipe de desenvolvimento, a regra não é usar o padrão que estou usando, mais sim usar um padrão que todos os envolvidos no projeto entendam.

Mixin

Um efeito colateral bom da inserção dos extension methods é o fato do desenvolvedor poder adicionar comportamentos a interfaces, esses comportamentos por sua vez poderão ser utilizados em todos os tipos que implementam a interface. As próximas imagens ilustram o cenário:

Mixin_1.jpg
Imagem 05

Mixin_2.jpg
Imagem 06

Mixin_3.jpg
Imagem 07

Como podem ver, declarei uma interface IPessoa e duas classes que implementam a mesma. Adicionei um Extension Method à interface IPessoa e depois pude utilizar o método nos tipos que implementam a interface.

Veja mais sobre mixin.

Conclusão

Nesse artigo mostrei como utilizar os Extension Methods e quais são as melhores práticas envolvidas com o recurso. Espero que tenham gostado, e aguardo feedbacks.

Abraços,
Denis Ferrari

Download do projeto de exemplo.

CategoriasArtigos Técnicos

Tratamento de erros em projetos asp.net

22 de fevereiro de 2009 Comentários desligados

Introdução

Olá Pessoal, nesse meu primeiro artigo sobre desenvolvimento resolvi apresentar uma classe que sempre usei em meus projetos, a classe de rastreamento de erros. O objetivo desse artigo é fazer com que o desenvolvedor não dependa das informações do usuário para detectar onde o problema ocorreu e também estudar os recursos que o asp.net oferece para tratamento de erros.

Vamos aprender como utilizar a instrução try…catch e falar um pouco sobre programação defensiva. Veremos o que a classe de rastreamento faz e como configurar a mesma em seu projeto, e finalmente veremos como funciona a tag customErros do web.config e como configurar seu projeto para apresentar páginas de erro amigáveis.

Utilização do try… catch… finally

A instrução try cacth permite que o desenvolvedor possa gerenciar possíveis exceções em seu código fazendo com que a exceção possa ser tratada em tempo de execução de uma forma amigável.

O código acima mostra como utilizarmos a instrução em questão:

try: Nesse ponto você insere o seu código passível de erro.

catch (FileNotFoundException e): Caso o código do try dispare uma exceção do tipo entre as chaves, o trecho será executado.

catch (Exception e): A classe Exception é a mais genérica entre as classes de exceções do .net, logo, a mesma deve ser sempre a última na lista de catchs.

finally: Esse trecho é sempre executado, não importando se houve ou não erros durante a execução. Uma dica é utilizar esse trecho para liberar recursos utilizados pelo seu código, Ex.: Fechar conexões.

Dica -> Procure não disparar nos seus códigos exceções do tipo Exception, use sempre que possível uma exceção específica para o tipo do erro.

Você também pode usar o try…catch de forma aninhada como mostra a imagem à baixo:

Use sempre o try…catch em códigos suscetíveis a erros (ou seja, quase todos). Dessa forma você poderá instruir o usuário com uma mensagem mais específica para o problema que aconteceu.

Programação defensiva

Programação defensiva é um padrão de desenvolvimento que tem a Lei de Murph como uma preocupação constante. Programadores que utilizam esse padrão escrevem seus códigos tentando prever todos os erros antes que os mesmos aconteçam. Esse padrão aumenta a qualidade e a segurança do projeto como um todo.

Sou totalmente a favor desse padrão, e se tivéssemos mais adeptos os projetos de software teriam uma qualidade bem superior à atual no mercado.

Classe de rastreamento

A classe de rastreamento é uma ferramenta desenvolvida com o seguinte propósito: Armazenar todos os dados possíveis sobre a exceção para que o desenvolvedor possa rapidamente descobrir a causa da mesma e tomar as medidas de correção.

Como o código é relativamente simples, não vou posta-lo por motivos de espaço, porém, você poderá fazer o download do projeto de exemplo no final do artigo.

A classe Rastreamento possui 4 métodos privados e 1 método público:

Rastreamento.RastrearSessao: Método privado responsável por coletar todos os dados da sessão corrente.

Rastreamento.RastrearCookies: Método privado responsável por coletar todos os dados dos cookies escritos pela aplicação.

Rastreamento.RastrearServidor: Método privado responsável por coletar o valor de todas as variáveis de servidor.

Rastreamento.RastrearFormulario: Método privado responsável por coletar todos os dados que foram enviados pelo cliente via Post.

Rastreamento.RastrearExcecao: Método público que monta um relatório texto que irá contar as informações da exceções, e os dados referentes aos métodos anteriores. Esse método que será invocado para rastrearmos nossas exceções.

Para utilizar a classe em seu projeto, basta copiar a mesma para dentro da pasta App_Code.

Dica -> Você pode personalizar a classe para armazenar o relatório onde quiser, o projeto de exemplo guarda o relatório num arquivo texto, porém, o mesmo pode ser enviado por e-mail, para um sgbd, etc.

Application_Error

Para utilizar a classe de rastreamento de forma genérica é muito fácil, basta adicionar o arquivo Global.asax na pasta raiz do seu projeto e configurar o evento Application_Error como mostra a imagem:

O evento Application_Error é disparado sempre que ocorre um erro não tratado na aplicação, logo, é só pegar o último erro ocorrido e passar a exceção para o método de rastreamento.

Nesse ponto, você terá configurado seu projeto para dar um feedback de cada exceção não tratada, porém, isso ajuda somente o desenvolvedor, não é nada agradável para o usuário se deparar com a “tela amarela” do asp.net, então vou abordar como configurar páginas amigáveis de erro.

Dica -> Pratique programação defensiva, trate o maior número de erros possíveis antes de disponibilizar o projeto. Não é bonito quando o cliente se depara com uma tela de erro a cada 3 cliques.

Tag customErrors do web.config

O Asp.net oferece recursos para que possamos configurar rapidamente uma página de erros amigável para os usuários da aplicação. Veja a imagem a seguir:

Adicionando a tag customErrors na sessão system.web do web.config podemos realizar as seguintes configurações:

defaultRedirect: Página que será exibida quando uma exceção não tratado for disparada.

mode: Atributo que configura como os redirecionamentos vão funcionar. On Sempre redireciona, Off Nunca redireciona RemoteOnly redireciona quando o usuário estiver usando um endereço diferente de localhost para acessar a aplicação.

Você também pode configurar páginas de erro personalizadas para código de erro existente.

Veja o funcionamento das configurações vistas no projeto de exemplo no final do artigo.

Conclusão

De forma muito prática é possível se ter um feedback da aplicação sobre suas exceções e também poupar o usuário de “telas amarelas”, não disponibilizo nenhum projeto sem esses recursos.

Espero que tenham gostado da minha visão sobre tratamento de erros.

Estamos aí para qualquer dúvida ou sugestão!

Abraços,
Denis Ferrari

Download do projeto de exemplo.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.