.NET - Os sete pilares da ASP .NET


Quando a ASP .NET foi lançada, havia algumas características e recursos que a diferenciavam de outros produtos Microsoft e outras plataformas para desenvolvimento web.

Neste artigo eu vou dar uma visão geral sobre esses recursos agrupando-os em 7 pontos chaves.

1- ASP .NET esta integrada com o .NET Framework

A .NET Framework ou plataforma .NET esta dividida em uma grande coleção de partes funcionais com toneladas de tipos (o termo usado na plataforma .NET para classes, interfaces, etc.).

Antes de começar a programar para qualquer aplicação .NET você precisa compreender estas partes. A massiva coleção de funcionalidades que a plataforma .NET fornece esta organizada em uma coleção de classes que estão agrupadas de forma lógica e hierárquica em um container que recebe o nome de namespace. Assim diferentes namespaces fornecem diferentes recursos.

Todos juntos os namespaces da plataforma .NET oferecem a funcionalidade para quase todos os aspectos do desenvolvimento desde uma simples aplicação console até uma aplicação distribuída. Este maciço kit de ferramentas é chamado Class Library ou Biblioteca de classes da plataforma .NET.

Obs: Se você desejar pode dar uma olhada na referência on-line da Class Library em : http://msdn.microsoft.com/en-us/library/ms229335%28v=VS.100%29.aspx

Curiosamente, a maneira como você usa as classes na plataforma .NET em ASP.NET é a mesma maneira que você as usa em qualquer outro tipo de aplicativo .NET (incluindo uma aplicação de Windows desktop, um Serviço do Windows, um utilitário de linha de comando,etc.). Embora existam classes específicas para aplicações Windows e para aplicações Web para criação de interfaces de usuário a grande maioria das classes da plataforma .NET (incluindo desde o acesso banco de dados a programação multithread) é utilizável em qualquer tipo de aplicação, ou seja, a plataforma .NET oferece as mesmas ferramentas para desenvolvedores web e para desenvolvedores de clientes ricos.

2- ASP .NET é compilada e não interpretada

As aplicações ASP.NET, como todas as aplicações .NET, são sempre compiladas. Na verdade, é impossível executar qualquer código C# ou Visual Basic sem que ele seja primeiro compilado.

As aplicações .NET passam por dois estágios de compilação. Na primeira etapa, o código que você escreve é compilado em uma linguagem intermediária chamada Microsoft Intermediate Language (MSIL), ou apenas IL. Esta primeira etapa é principal razão das linguagens da plataforma .NET serem interdependentes.

Essencialmente, todas as linguagens .NET (incluindo Visual Basic, C#) são compiladas em código IL idênticos IL. Para ASP .NET esta primeira etapa de compilação pode acontecer automaticamente quando a página for solicitada pela primeira vez, ou você pode executá-la com antecedência (um processo conhecido como pré-compilação). O arquivo compilado com código IL é um chamado assembly.

O segundo nível de compilação acontece antes que a página é realmente executada. Neste ponto, o Código IL é compilado em código de baixo nível de máquina nativo. Esta etapa é conhecida como compilação just-in-time (JIT), e tem lugar da mesma maneira para todas as aplicações .NET (incluindo aplicações Windows).

Naturalmente, a compilação JIT provavelmente não seria tão útil se fosse preciso ser executada toda vez que um usuário requisitasse uma página web a partir do seu site. Felizmente, os aplicativos ASP.NET não precisam ser compilados toda vez que uma página é requisitada.

Em vez disso, o código da IL é criado uma vez e apenas regerado quando o fonte for modificado. Da mesma forma, os arquivos de código nativo de máquina são armazenadas em um diretório do sistema que tem um caminho como C:\Windows\Microsoft.NET\Framework\[Versão]\Temporary ASP.NET Files.

O ponto no qual seu código é compilado para IL depende de como você está criando e implantando seu aplicativo web. Se você está construindo um projeto web no Visual Studio, o código é compilado para IL quando você compilar seu projeto.

Mas se você está construindo um projeto de site mais leve, o código de cada página é compilada a primeira vez que solicitarem essa página. De qualquer maneira, o código passa por sua segunda etapa de compilação (de IL para código de máquina), na primeira vez que é executado.

- Processo de compilação de uma página ASP .NET

A compilação .NET é dissociado em duas etapas, a fim de oferecer aos desenvolvedores maior comodidade e a melhor portabilidade. Antes de um compilador poder criar um código de baixo nível de máquina, ele precisa saber qual o tipo de sistema operacional e em qual plataforma de hardware o aplicativo será executado em (por exemplo, 32 bits ou 64 bits Windows). Por ter dois estágios de compilação, você pode criar um assembly compilado com código .Ne ainda distribuí-lo para mais de uma plataforma.

Além disso a ASP.NET também inclui ferramentas de pré-compilação que você pode usar para compilar sua de aplicação para código de máquina uma vez que você a tiver implantado para o o servidor web de produção. Isto permite-lhe evitar a sobrecarga do primeiro tempo de compilação quando você implanta um aplicativo concluído (e impedir que outras pessoas adulterem o seu código).

3- ASP .NET é Multi-Linguagem

Você sabia que pode escolher a linguagem que vai usar para desenvolver aplicações ASP .NET ? Você pode escolher VB .NET ou C#, somente para citar as mais importantes.

Sim, e embora você provavelmente vai optar por usar uma linguagem ao invés de outra quando for desenvolver um aplicativo, tal escolha não vai determinar o que você pode realizar com suas aplicações web. Isso porque não importa a linguagem que você usar, o código é compilado em IL.

A IL é um trampolim para cada aplicativo gerenciado. (Um aplicativo gerenciado é qualquer aplicativo que está escrito para .NET e executa dentro do ambiente gerenciado do CLR.).Em certo sentido, a IL é a linguagem da plataforma .NET, e é a única linguagem que o CLR reconhece.

Dê uma espiada no trecho de código abaixo que exibe apenas uma mensagem no console:

Imports System
Namespace Macoratti
    Public Class Teste
        Shared Sub Main(ByVal args() As String)
            Console.WriteLine("Macoratti")
        End Sub
    End Class
End Namespace
using System;
namespace Macoratti
{
    public class Teste
   {
        static void Main(string[] args)
        {
           Console.WriteLine("Macoratti");
        }
    }
}

A seguir temos uma visão do código IL gerado para o método Main() da versão para o VB .NET:

Para visualizar o código IL basta rodar a ferramenta IL Disassembler que é instalada com o Visual Studio. Procure pelo arquivo ildasm.exe na pasta C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin

Execute o arquivo ildasm.exe a na janela clique em File->Open e abra o arquivo .exe gerado.(geralmente na pasta bin do projeto)

Se você for paciente e usar um pouco de lógica , vai poder desconstruir o código IL com bastante facilidade e descobrir o que está acontecendo. O fato do código IL ser tão fácil de desmontar pode levantar questões de controle de privacidade e de código, mas estas questões não costumam ser de qualquer preocupação para os desenvolvedores ASP.NET. Isso porque todo o código ASP.NET é armazenado e executado no servidor. Dessa forma o cliente nunca receberá o arquivo de código compilado, e portanto não tem oportunidade de decompilá-lo.

Se você quiser realmente proteger o seu código pode fazer o ofuscamento do mesmo, neste caso considere o uso de um obscurador de código que embaralha o código para tornar mais difícil realizar o processo da engenharia reversa. (Um obscurador popular é o Dotfuscator.)

Se compilarmos o código equivalente para a linguagem C# e o examinarmos nesta ferramenta iremos encontrar praticamente o mesmo resultado final obtida para versão Visual Basic.

Embora diferentes compiladores podem às vezes apresentar suas próprias otimizações, como regra geral nenhuma linguagem .NET é superior a outra , porque todas elas compartilham a mesma infraestrutura comum.

Esta infraestrutura está formalizada na CLS (Common Language Specification). É importante notar que a IL foi adotada como um padrão Ecma e ISO. Eles permitem a adoção de outras estruturas de linguagens comuns de outras plataformas. O projeto Mono em www.monoproject é o melhor exemplo de um projeto como este.

4- ASP .NET é hospedada pela CLR - Common Language Runtime

Talvez o mais importante aspecto do engine ASP .NET é que ele é executado no interior do ambiente de execução da CLR. O conjunto da .NET Framework, ou seja, todos os namespaces, aplicações e classes é referido como código gerenciado e apresenta os seguintes benefícios:

a-) Gerenciamento automático de memória e coleta de lixo: Toda vez que sua aplicação instancia um objeto de tipo de referência, o CLR aloca espaço na memória heap gerenciada para aquele objeto. No entanto, você nunca precisa limpar essa memória manualmente. Assim, quando sua referência a um objeto sai do escopo (ou a sua aplicação termina), o objeto torna-se disponível para coleta de lixo. O coletor de lixo é executado periodicamente dentro da CLR, automaticamente recuperando a memória não utilizada para objetos inacessíveis. Este modelo evita que você tenha que se preocupar com as complexidades de baixo nível de manipulação de memória.

b-) A segurança de tipo: Quando você compila um aplicativo, a plataforma .NET adiciona informações ao seu assembly que indica detalhes, como as classes disponíveis, dos seus membros, seus tipos de dados, e assim por diante. Como resultado, outras aplicações podem usá-los sem a necessidade dos arquivos de suporte adicionais e, o compilador pode verificar que cada chamada é válida durante a execução. Esta camada extra de segurança remove completamente categorias inteiras de erros de baixo nível.

c-) Metadados extensível: As informações sobre classes e membros é apenas um dos tipos de metadados que a plataforma .NET armazena em um assembly compilado. Os Metadados descrevem o seu código e permitem que você forneça informações adicionais em tempo de execução ou outros serviços. Por exemplo, este metadados pode dizer a um depurador como rastrear seu código, ou pode dizer o Visual Studio como exibir um controle personalizado em tempo de projeto. Você também pode usar metadados para permitir serviços de tempo de execução, tais como transações
ou agrupamento de objetos.

d-) Tratamento de erros estruturado: A plataforma .NET oferece a manipulação de exceção estruturada, que lhe permite organizar seu código de manipulação de erros de maneira lógica e concisa. Você pode criar blocos separados para lidar com diferentes tipos de erros. Você também pode aninhar manipuladores de exceção em múltiplas camadas.

e-) Multithreading: A CLR fornece um pool de threads que várias classes podem usar. Por exemplo, você pode chamar métodos, ler arquivos, ou se comunicar com os serviços Web de forma assíncrona, sem a necessidade de explicitamente criar novas threads.

5- ASP .NET é orientada a objetos

A ASP.NET é verdadeiramente orientada a objetos. Não só o seu código que tem acesso completo a todos os objetos na .NET Framework, mas você também pode explorar todas as convenções de um ambiente orientado a objetos.Por exemplo, você pode criar classes reutilizáveis, padronizar o código com interfaces, estender as classes existentes com a herança, e agregar funcionalidades úteis em um componente, distribuído compilado.

Um dos melhores exemplos de pensamento orientado a objetos em ASP.NET é encontrado nos controles baseados em servidor. Os controles baseados em servidor são o do encapsulamento. Os desenvolvedores podem manipular objetos de controle por meio de programação usando o código para personalizar sua aparência, fornecer dados para mostrar, e até mesmo reagir aos eventos.

O baixo nível de marcação HTML que esses controles processam é transparente ao desenvolvendo; então, ao invés de forçar o programador a escrever HTML puro manualmente, os objetos de controle renderizam a si mesmos em HTML apenas antes do servidor web enviar a página para o cliente. Desta forma,a ASP .NET oferece os controles de servidor como uma forma de abstrair os detalhes de baixo nível de HTML e programação HTTP.

6- ASP .NET suporta todos os navegadores

Um dos maiores desafios enfrentados pelos desenvolvedores web é a grande variedade de navegadores que precisam de apoio. Diferentes navegadores, versões e configurações diferem no suporte a XHTML, CSS e JavaScript. Os desenvolvedores Web então precisam escolher se eles devem tornar suas aplicações web compatíveis com o navegador mais usado ou se devem adicionar gambiarras para lidar com peculiaridades bem conhecidas dos navegadores populares.

A ASP.NET resolve esse problema de uma forma extremamente inteligente. Embora seja possível recuperar informações sobre o navegador do cliente e as suas capacidades em uma página ASP.NET, a ASP.NET, na verdade incentiva os desenvolvedores a ignorar essas considerações e usar um rico conjunto de controles de servidor web. Estes controles de servidor tornam a sua marcação adaptativamente levando as capacidades do cliente em consideração.

Navegadores diferentes, e diferentes versões do mesmo navegador, suportam recursos diferentes. Os Controles de servidor ASP.NET irão determinar automaticamente o navegador que solicitou a página e tornar a marcação apropriada para o navegador. Porém, alguns recursos dos controles podem não ser processados em navegadores mais antigos, por isso é uma boa ideia realizar testes apurados em navegadores mais antigos.

7- ASP .NET é fácil de configurar e de distribuir

Uma das maiores dores de cabeça de um desenvolvedor web enfrenta ao longo de um ciclo de desenvolvimento é a implantação de uma aplicação web em um servidor de produção. Não só os arquivos de páginas web, bases de dados e componentes precisam ser transferidos, mas os componentes precisam ser registrados e uma série de ajustes de configuração precisam ser recriados. A ASP.NET simplifica esse processo consideravelmente.

Cada instalação do .NET Framework fornece as mesmas classes comuns. Como resultado, a implantação de um aplicação ASP.NET é relativamente simples. Para uma implantação padrão simples, basta copiar todos os arquivos para um diretório virtual em um servidor de produção (usando um programa de FTP ou mesmo um comando de linha de comando como XCOPY). Enquanto a máquina host possuir o .NET Framework, não haverá consumo de tempo nas etapas de registro.

A distribuição dos componentes que o seu aplicativo usa também é simples de fazer. Tudo que você precisa fazer é copiar os conjuntos de componentes, juntamente com os arquivos do seu site quando você implantar seu aplicativo web. Como todas as informações sobre o componente são armazenadas diretamente nos metadados do arquivo de montagem, não há necessidade de iniciar um programa de registro ou modificar o Registro do Windows. Contanto que você coloque esses componentes no lugar correto (o subdiretório Bin do diretório do aplicativo web), o motor ASP.NET detecta automaticamente os componentes e os torna disponíveis para o seu código de página da web.

A configuração é outro desafio que acompanha a implantação de aplicativos web, especialmente se você precisar transferir informações de segurança, tais como contas de usuário e privilégios do usuário. A ASP.NET torna este processo de implantação mais fácil, minimizando a dependência de configurações no IIS (Internet Information Services). Em vez disso, a maioria das Configurações ASP.NET são armazenadas em um arquivo web.config dedicado.

O arquivo web.config é colocado no mesmo diretório que suas páginas web. Ele contém um agrupamento hierárquico de configurações do aplicativo armazenado em um formato XML legível que você pode editar usando nada mais do que um editor de texto como o Notepad. quando você modificar uma configuração de aplicativo, o ASP.NET percebe a mudança e reinicia o aplicativo em um novo domínio da aplicação (mantendo o domínio da aplicação existente viva tempo suficiente para terminar o processamento de qualquer solicitações pendentes). Como o arquivo web.config não está bloqueado, então ele pode ser atualizado a qualquer momento.

Existem muitos outros recursos importantes que a ASP .NET fornece ao desenvolvedor web para poder criar aplicações dinâmicas de forma produtiva e eficiente mas destaquei esses 7 recursos por considerá-los as peças chaves dentre os demais recursos.

E assim, de forma resumido, apresentei os pilares da ASP .NET.

Rom 3:10 como está escrito: Não há justo, nem sequer um.

Rom 3:11 Não há quem entenda; não há quem busque a Deus.

Rom 3:12 Todos se extraviaram; juntamente se fizeram inúteis. Não há quem faça o bem, não há nem um só.

Referências:


José Carlos Macoratti