Novidades do .NET 2.0: SQL Cache Dependency

No ASP.NET 1.X, era possível criar dependências para valores armazenados no objeto Cache do namespace System.Web.Caching. A invalidação do Cache poderia ficar associada a vários eventos, como após um determinado período de tempo, mudança em um ou mais arquivos e/ou diretórios ou mudança em um valor de outra chave de cache. Sempre que um desses eventos ocorresse, o cache seria inutilizado. Era possível até mesmo informar um delegate que deveria ser chamado quando o evento de invalidação do cache ocorresse.

Uma grande melhoria do ASP.NET 2.0 nesse campo foi a introdução da possibilidade de se criar uma dependência do Cache com o banco de dados SQL Server. Assim, sempre que algum dado for alterado no banco de dados, o cache é invalidado. Deste modo, é possível ter os benefícios de performance que o uso de cache propricia juntamente com dados sempre atualizados.

Referências
Improved Caching in ASP.NET 2.0
SqlCacheDependency Class (System.Web.Caching)
Walkthrough: Using ASP.NET Output Caching with SQL Server

Ricardo Oneda

Novidades do .NET 2.0: Cross-Page Postback


Na minha opinião, uma das grandes limitações do ASP.NET 1.X era a incapacidade de se fazer um post para outra página de forma simples. Existiam formas de se contornar tal limitação, como o uso de Response.Redirect() ou do Server.Transfer(), mas exigia um certo trabalho. No ASP.NET 2.0 essa limitação foi extinta graças a introdução da propriedade PostBackUrl. Basta configurar esta propriedade em algum controle que gera um post (como um botão) fornecendo o nome da página de destino e pronto. Caso ela não seja configurada, o post é feito para a própria página.

O conteúdo da página anterior pode ser acessado através da propriedade PreviousPage da classe Page, que também possui a nova propriedade IsCrossPagePostBack, que tem função semelhante à propriedade IsPostBack, velha conhecida do ASP.NET 1.X.

Referências:

Cross-Page Posting in ASP.NET Web Pages
Design Considerations for Cross Page Post Backs in ASP.NET 2.0

Ricardo Oneda

Novidades do .NET 2.0: mudanças na infra-estrutura do ASP.NET 2.0


Além de vários novos controles adicionados, as principais mudanças do ASP.NET  2.0 foram introduzidas em sua infra-estrutura. Mudanças drásticas foram feitas:

  • no modelo de codificação, no qual anteriormente havia uma relação de herança entre a página ASPX e o arquivo de código (code-behind), e agora faz uso de classes partial, ou seja, tanto a página ASPX quanto o código fazem parte da mesma classe, que são combinados em tempo de execução; isso também faz com que o arquivo code-behind fique mais claro e menor do que o modelo antigo;
  • na compilação: agora, o padrão do ASP.NET é compilar a aplicação em tempo execução. Isso implica em copiar os arquivos code-behind para o servidor. Entretanto, por questões de segurança e/ou privacidade, nem sempre podemos ou queremos enviar o código com toda nossa lógica para o servidor. Nestes casos, podemos utilizar o que foi chamado de Precompilation for Deployment, que consiste em pré-compilar o site em assemblies, que então serão copiados para o servidor. Este tipo de pré-compilação faz com que nem mesmo o código fonte de páginas ASPX fique disponível. Também foi desenvolvido um outro tipo de pré-compilação chamado In-Place Precompilation, cujo objetivo, é ganhar performance, já que não será necessária a compilação das página na primeira vez em que ela for solicitada, que é o que ocorre se não for feita a pré-compilação. Ambos os tipos de pré-compilação são feitos com o utilitário de linha de comando aspnet_compiler.exe;

Também vale citar as mudanças na estrutura do ViewState. O ViewState é uma técnica utilizada pelo ASP.NET para manter o estado de controles de uma página. Isso é feito através de um campo HIDDEN (oculto) da página chamado __VIEWSTATE e, dependendo de como fosse utilizado, poderia causar um sério problema de performance, pois seu tamanho poderia aumentar significantemente, o que aumentaria também o tamanho da página. Foram feitas alterações no formato de serialização deste campo, o que proporcionou a redução do seu tamanho em quase 50%, em um dos testes feitos.

Referências:

ASP.NET 2.0 Internals
ASP.NET Web Site Precompilation Overview
ASP.NET Page Class Overview
Speed Up Your Site with the Improved View State in ASP.NET 2.0

Ricardo Oneda

Novidades do .NET 2.0: Classes Partial


No .NET 2.0, foi introduzido o conceito de classes parciais (partial). Isso significa que a definição de uma classe pode ser dividida em vários arquivos distintos. Esta característica pode ser útil em projetos grandes, onde vários desenvolvedores trabalham sobre a mesma classe, ou então na alteração de código gerado automaticamente - por exemplo, nos proxys gerados para acesso a Web Services - pois assim o código pode ser gerado novamente e não se tem que fazer as alterações outra vez, já que as customizações estarão em outro arquivo. Isso sem falar que todo novo modelo de código do ASP.NET 2.0 utiliza classes partial.

Referências:

Create Elegant Code with Anonymous Methods, Iterators, and Partial Classes
Partial Class Definitions

Ricardo Oneda

Novidades do .NET 2.0: Generics


Apesar da Microsoft já ter liberado o download da versão final do Visual Studio 2005/.NET Framework 2.0/SQL Server 2005 para os assinantes do MSDN, o lançamento oficial dos novos produtos só ocorrerá em 07 de novembro, ou seja, semana que vem. Nestes dias que antecedem o lançamento oficial, pretendo escrever sobre algumas novidades que as novas versões dos produtos nos trazem. Por novidades eu quero dizer desde algo "revolucionário" até a introdução de uma simples propriedade que tenha trazido algum benefício. É claro que eu não tenho a pretensão de citar todas as novidades do .NET 2.0 e muito menos fazer uma lista das melhores. Encarem isso apenas como uma pequena lista de novidades, na qual apresentarei uma pequena introdução ao assunto, de forma resumida, e links, nos quais se pode aprofundar sobre o tema. O primeiro assunto é:

Generics

Generics são uma novidade do .NET 2.0 que nos permitem criar classes, métodos ou outra estrutura de dados de forma genérica, ou seja, independentes de um tipo de dados. Os Generics nos proporcionam reusabilidade de código, tipagem forte de dados (type safe) e melhora na performance, já que não é necessário fazer o boxing/unboxing na conversão de dados, permitindo criar coleções genéricas de um determinado tipo de dado. Por exemplo, antes dos Generics, poderíamos usar um ArrayList para guardar objetos, mas não havia garantia de que o ArrayList contivesse somente um determinado tipo de objeto, o que poderia causar erros em tempo de execução na hora de fazer a conversão. Com os Generics, podemos definir que uma coleção irá conter somente objetos de um tipo específico, e caso essa regra seja quebrada, haverá um erro de compilação.

Referências:

An Introduction to C# Generics
Introducing Generics in the CLR
More on Generics in the CLR
Generics (C#)
Generics FAQ: Fundamentals
Generics FAQ: .NET Framework
Generics FAQ: Tool Support
Generics FAQ: Best Practices

Ricardo Oneda