Do que trata o artigo

Este artigo apresenta a tecnologia ASP.NET como motivação para desenvolvedores Desktop que estejam interessados em começar a desenvolver para Web. Apresenta as características básicas, vantagens sobre outras tecnologias, cuidados ao sair do Desktop e ir para um ambiente Web, dicas de performance, segurança e mais.


Para que serve

Serve para orientar de forma correta e imparcial desenvolvedores Desktop a iniciarem seus trabalhos na Web com ASP.NET reaproveitando os conhecimentos que já possuem.


Em que situação o tema é útil

Hoje ter uma solução baseada na Internet deixou de ser uma opção ou vantagem, é uma obrigação. Este artigo será útil para orientar empresas e desenvolvedores nos cuidados necessários ao iniciar os trabalhos no desenvolvimento Web com ASP.NET.

Resumo do DevMan

O ASP.NET é sem dúvida a melhor tecnologia para o desenvolvimento Web para aqueles que já estão habituados com o desenvolvimento Desktop. Dessa forma, nada melhor do que ter em mente cuidados ao criar os primeiros projetos. Destacarei itens de extrema importância, como preocupação triplicada com segurança, dicas de performance, comparação entre ambientes, de forma a tornar o processo menos doloroso. Faremos vários paralelos entre os diferentes paradigmas.

Há um bom tempo empresas e desenvolvedores detectaram que possuir uma versão Web de seus produtos Desktop seria uma excelente opção. Estavam completamente certos. A Web se tornou o novo padrão para desenvolvimento dos mais variados tipos de aplicações. Entretanto, muitas empresas preferiram não arriscar na nova onda do mercado, muito tendo em vista preocupações tecnológicas. Qual a melhor tecnologia para desenvolvimento Web se eu e minha equipe já possuímos um bom know-how no desenvolvimento Desktop? Hoje aquela opção se tornou dor de cabeça para muitos, pois não ter um sistema na Web ou pelo menos parte dele é um problema, um grande problema. Deixou de ser opção, é uma obrigação.

Nesse sentido vemos hoje uma infinidade de profissionais à procura de material e aperfeiçoamento para portar ou migrar completamente sistemas Desktop para ambiente Web, ou mesmo iniciar seus novos projetos na plataforma Web, aproveitando seu vasto conhecimento adquirido durante anos de desenvolvimento para Windows. Muitos pontos devem ser levados em consideração neste caso, sair migrando tudo de uma única vez é certamente um risco. Aplicações Desktop terão sua serventia por muitos e muitos anos ainda. Principalmente aplicativos comerciais continuarão a rodar na plataforma Windows, esse é o melhor caso, por exemplo, para aplicativos de frente de caixa e softwares de automação.

Há muitos anos a Web realmente tinha suas limitações, as tecnologias de desenvolvimento eram literalmente arcaicas. Nos primórdios da Internet, basicamente o que tínhamos eram páginas estáticas com conteúdo textual e algumas imagens, normalmente através da utilização de HTML puro. A Internet começou a se tornar dinâmica com a inclusão das linguagens servidoras. Por exemplo, a tecnologia CGI permitiu incluir dados dinâmicos em páginas, como dados vindos de um banco de dados.

Hoje a história é outra. Temos um leque muito grande de opções para o desenvolvimento de aplicativos Web. Tecnologias, linguagens, ambientes de desenvolvimento e frameworks facilitam a criação de softwares baseados na Internet. E quem sempre desenvolveu para Desktop, e nunca pôs a mão em uma linha de código em ambiente Web, qual a melhor opção? Aqui entra o ASP.NET.

ASP.NET como opção para desenvolvedores Desktop

O ASP.NET revolucionou o mercado de desenvolvimento para Web quando surgiu, por permitir o desenvolvimento de aplicações de forma visual, o que é comum para desenvolvedores que utilizam o ambiente Desktop. Usando o Visual Studio, desenhamos um formulário (Web Form) arrastando controles para a tela, o que chamamos de desenvolvimento drag & drop (arrastar e soltar).

Os controles servidores do ASP.NET são os principais responsáveis pela facilidade do desenvolvimento visual. Os ASP.NET Server Controls encapsulam a geração de código HTML e permitem um desenvolvimento orientado a objetos, usando boas práticas de programação. O desenvolvedor não precisa se preocupar em conhecer detalhes específicos da plataforma Web, como geração de código HTML para rodar no browser, tratamento de requisições HTTP, uso de protocolos de baixo nível etc. Desenvolvemos da mesma forma que estávamos acostumados no Desktop.

Controles ASP.NET têm propriedades, métodos e eventos, assim como componentes utilizados em ambiente Desktop. Se pararmos para pensar como isso era feito antes, lembraremos das “Actions” no servidor, que eram usadas para recuperar informações não tipadas diretamente de formulários Web, manipular HTML, gerar novas tags e devolver um novo conteúdo. Tudo isso misturado em um único arquivo. No ASP.NET, configuramos propriedades visualmente, programamos no servidor usando uma linguagem de alto nível, podendo desfrutar de todos os recursos da orientação a objetos.

O que quero dizer com tudo isso? O ASP.NET é sem dúvida alguma a melhor opção para o desenvolvimento Web para quem já tem prévios conhecimentos com linguagens de desenvolvimento Desktop. E mesmo para quem nunca desenvolveu qualquer tipo de aplicação, o ASP.NET também se mostra uma excelente opção: é produtivo, intuitivo, robusto, fácil, com excelente documentação e recursos disponíveis para seu aprendizado, está em constante evolução (é muito importante apostar em uma tecnologia que você sabe que não vai nascer e morrer da noite par o dia), possui uma grande comunidade ao redor do mundo e muito mais.

Este artigo não é um tutorial prático nem tem por objetivo desenvolver um exemplo completo, mas permita-me mostrar um paralelo claro do que estou querendo dizer. Uma das aplicações mais famosas que sempre vi durante meus estudos em uma das linguagens mais populares para o desenvolvimento Desktop, o Delphi, consistia do formulário da Figura 1. Note os controles usados, um Edit, um ListBox e um Button. Este formulário foi criado visualmente, nada de programação, simplesmente arrastamos os controles para dentro do designer. A função dele é adicionar no ListBox os itens digitados no Edit, quando o botão for clicado.

Figura 1. Uma aplicação Desktop tradicional de exemplo

O código do evento OnClick do botão pode ser visto aqui:

  procedure TForm1.Button1Click(Sender: TObject);
  begin
    ListBox1.Items.Add(Edit1.Text);
  end;

E na Web? Exatamente igual, não existe diferença alguma. Duvida? Arrastamos os mesmos controles para o designer do Visual Studio, digitamos o mesmo código e rodamos (Figura 2). Claro, aqui não temos Edit, temos o TextBox. Talvez seja a maior curva no aprendizado deste exemplo. O código a seguir mostra a implementação do Click do botão, em C#:

  protected void Button1_Click(object sender, EventArgs e)
  {
      ListBox1.Items.Add(TextBox1.Text);
  }

Figura 2. Uma aplicação Desktop tradicional, agora na Web

A propósito, também é possível desenvolver para ASP.NET usando o Delphi Prism com o Visual Studio, exatamente da mesma forma, o código é:

  method Default2.Button1_Click(sender: System.Object; e: System.EventArgs);
  begin
      ListBox1.Items.Add(TextBox1.Text);
  end; 

É claro, o .NET framework tem um conjunto de classes bastante vasto, existem inúmeras opções para realizar uma tarefa (um exemplo claro são as diversas formas de acesso a banco de dados). Além disso, muitos programadores Desktop sentem maiores dificuldades não na utilização de uma linguagem ou ambiente diferente (pois são muito parecidos), mas na quebra de paradigma Web versus Desktop. Costumo dizer que, muitas vezes, é mais difícil migrar uma mente do que um código. Partindo disto, vamos examinar alguns cuidados, dicas e técnicas para você não ter problemas ao iniciar seus trabalhos no ASP.NET.

Dicas para um bom desenvolvimento Web

Em primeiro lugar, tenha em mente que uma página não é um formulário do Windows. Na Web, muitas coisas que fazemos com tranquilidade no Desktop exigem um pouco mais de esforço. Às vezes, eu realmente sugiro que você não tente imitar sua aplicação Desktop e fazê-la idêntica em ASP.NET. Isso é um risco! Tentar tornar uma página do browser tão rica quanto uma interface Windows é um sonho, no qual já existem soluções que estão em evolução e aperfeiçoamento, portanto, não reinvente a roda. Como tecnologias nesse sentido podemos citar o ASP.NET AJAX e o Silverlight.

Um outro ponto importante no desenvolvimento Web é performance. No Desktop, muitos não se preocupam com a correta alocação e liberação de recursos, total, se você deixar escapar uns 4 bytes em um clique de um botão “Gravar”, provavelmente ao final do dia o usuário vai desligar o Windows e o computador e tudo é liberado “à moda antiga”. Já na Web, 4 bytes perdidos em uma requisição podem se tornar 4 Gigabytes consumindo a memória do servidor ao final de um dia. Aplicações Web não são “desligadas”. ASP.NET é state-less, e isso ajuda, significa que muita coisa é liberada entre uma requisição e outra. Além disso, o .NET conta com um poderoso mecanismo de coleta de lixo que libera recursos não mais utilizados. Mas tenha em mente, você vai usar muito mais o try finally (ou using) a partir de agora.

Lembre-se que na Web milhares de usuários podem acessar sua aplicação em um mesmo instante, por esse motivo, ela é por padrão multithread. Tenha cuidado com cada byte que você aloca na memória do servidor, saiba gerenciar bem o estado de cada variável, saiba utilizar corretamente sessões. No desktop, cada usuário roda uma única instância da sua aplicação por vez. Na Web serão milhares rodando no mesmo servidor. Quer um exemplo de como isso é uma preocupação importante? Sendo curto, objetivo e prático, abra mil instâncias do Delphi ou do Visual Studio na mesma máquina e verá o que quero dizer.

Gerenciamento de estado – Este é certamente o ponto de maior dificuldade ao iniciar os trabalhos na Web. No Desktop, você aloca um objeto e deve liberá-lo após seu uso. Na Web, tudo é perdido após cada requisição (em tecnologias state-less como o ASP.NET), como comentei anteriormente. Realmente gerenciar sessão é algo que não existe no Desktop, então procure começar seus estudos por este ponto, pois ele é crítico. Os controles servidores ASP.NET já nos ajudam bastante mantendo seu próprio estado entre requisições. No exemplo que apresentei antes, como os dados foram sendo persistidos no ListBox enquanto eu os adicionava? Pode parecer uma questão idiota, mas era para não funcionar, o ListBox deveria exibir somente o último item adicionado. Graças ao recurso de ViewState, o ASP.NET nos poupa de controlar estado para os controles do servidor. Porém o resto é com você, tenha isso em mente.

Postbacks – Esteja bem preparado, pois aqui mora uma das principais diferenças na migração. Quando você clica em botão no Desktop, uma mensagem da API do Windows é trocada internamente, e tratada pelo framework que você utiliza, normalmente através de um evento. No ASP.NET existe o mesmo conceito (de eventos), porém lembre-se que há um Postback, uma nova requisição é criada, várias informações são trocadas entre cliente e servidor.

Além disso, procure conhecer profundamente todos os recursos que o ASP.NET e o .NET como um todo oferecem para aumentar a performance de aplicações Web, em especial:

  • Conexão a banco – a consulta ao banco de dados é o recurso mais precioso e que mais consome tempo em ambiente Web. No desktop abrimos uma conexão e a mantemos aberta durante toda a aplicação, se for uma aplicação client-server provavelmente o SGBD vai ter no máximo umas 50 conexões simultâneas. Na Web isso é extremamente diferente. Aqui temos que abrir uma conexão, o mais rápido possível executar os comandos SQL e fechar a conexão. Deixe que o ADO.NET (tecnologia de acesso a dados) cuide do resto. Ele possui mecanismos, como Connection Pooling, que vão garantir a performance;
  • Use Stored Procedures, elas aumentam consideravelmente a performance do servidor;
  • Use e abuse (mas com cuidado) do objeto Cache, principalmente para colocar resultados de consultas do banco de dados em memória e dispensar futuras conexões. Por exemplo, se você tem uma tabela que é constantemente consultada, porém não sofre tantas alterações, traga os dados para Cache e a partir daí não vá mais ao banco;
  • OutputCache – excelente recurso que permite que a saída em HTML gerada pelo ASP.NET possa ser colocada em memória. Futuras requisições ao servidor não realizam nenhuma tarefa adicional, como processar o código C# ou Delphi Prism, ou renderizar a página, ou consultar o BD. O ASP.NET simplesmente devolve o HTML pronto e ponto final. Voa.
  • Não tente simular algo como DataModules em ambiente Web. Aqui a regra é: execute algo, coloque em tela o resultado e feche tudo;
  • Além desses cuidados básicos, procure sempre usar boas prática de desenvolvimento em suas aplicações Web, através da Programação Orientada a Objetos, Design Patterns, Testes, Refactoring, Desenvolvimento em Camadas etc. Separe bem a responsabilidade de cada classe, use herança, esconda implementações complexas (use interfaces e classes abstratas). Isso facilitará a manutenção futura da sua aplicação, além de torná-la mais adaptável a uma possível mudança técnica futura sem causar um impacto gigantesco em toda a solução (por exemplo, a troca do tipo de servidor de banco de dados ou da tecnologia de acesso a dados). Aproveite os recursos do Visual Studio, como Code Analysis, recursos para arquitetura (novo no VS2010), testes integrados, para sempre deixar sua aplicação com qualidade.

    Triplique seus cuidados com segurança. Lembre-se que na Web seu aplicativo estará acessível ao mundo inteiro. Conheça os principais tipos de ataque a servidores, defina boas políticas de segurança ainda na fase de análise do projeto. E lembre-se, o ASP.NET lhe dará um boa mão nesse sentido, pois muitos detalhes de implementação estão prontos.

    E finalmente, tenha muito cuidado ao optar por tecnologias que são usadas em conjunto com o ASP.NET. Se sua equipe está iniciando o desenvolvimento na Web, tenha em mente que há uma curva de aprendizado que pode ser um risco. Opte por tecnologias mais consolidadas, bem testadas, com maior documentação e garantia comprovada. Por exemplo, desenvolvedores Desktop normalmente não estão acostumados a utilizar frameworks de persistência e mapeamento objeto relacional. Sair usando logo no primeiro dia de projeto o NHibernate ou o ADO.NET Entity Framework pode ser custoso, principalmente se o prazo for uma preocupação. Ambos são excelentes frameworks, e aqui vai uma dica caso queira considerar o seu uso em projetos futuros: desenvolva em camadas, assim, mais adiante você pode substituir sua camada de acesso facilmente sem modificar outros módulos do sistema.

    Vantagens do desenvolvimento Web que não existem no Desktop

    Agora que já vimos que o ASP.NET é a solução ideal para os desenvolvedores Desktop, vamos só lembrar de alguns aspectos que por tabela você ganha ao colocar sua solução na Web:

    • Deployment – na Web, você instala seu software em um Data Center, um servidor nas nuvens, seus clientes não precisam nada mais do que um browser. Nada de instalar aplicativos em dezenas de máquinas, configurar arquivos, pastas, bibliotecas etc. Uma atualização do software pode ser feita no servidor, e todos os clientes passam a enxergá-la;

    • Se você ainda é uma daquelas pessoas que discute qual é o melhor sistema operacional, se Windows, Linux, Mac OS, Google Chorme OS, esqueça. Ao desenvolver com ASP.NET, você hospedará seu sistema em um servidor dedicado e tudo o que seu cliente precisa é de um browser, rodando em qualquer sistema operacional. Pode até mesmo usar um iPhone, ou um SmartPhone com Windows Mobile (ou futuramente o Windows Phone 7), e acessar dados da aplicação Web de qualquer parte do planeta, sem instalar nada;

    • Manutenção – Nada de se preocupar com backups dos clientes, visitas presenciais, envio de mídias com o software, downloads, vírus etc. Isso são características de sistemas Desktop. Aproveite, as dores de cabeça com esses problemas acabam ao ter seus sistema nas nuvens;

    O que vem por aí?

    Hoje estamos diante de um dos maiores lançamentos mundiais na área de desenvolvimento: o Visual Studio 2010, juntamente com o ASP.NET 4.0 e .NET 4.0, confirmado para 12 de Abril de 2010. Procure se manter informado sobre as novidades, acompanhe as evoluções tecnológicas e o novos recursos que esta versão trará. No ASP.NET, destaco o aprimoramento do suporte ao AJAX, o que vai tornar suas aplicações Web cada vez mais parecidas com seu software Desktop.

    Conclusão

    Este artigo procurou motivar você, desenvolvedor Desktop, a optar pela tecnologia ASP.NET para seus novos projetos Web. Comprovamos que o ASP.NET é sem dúvida alguma a opção mais robusta do mercado para este propósito, e a que exigirá uma menor curva de aprendizado. Vimos também muitos cuidados que você deve ter ao começar a escrever software que rodará nas nuvens. Cuidados com performance, segurança, gerenciamento de estado, que são tão importantes quanto os requisitos impostos pelo seu cliente. Abra o Visual Studio, crie uma nova aplicação ASP.NET e sinta-se em casa. Sucesso nos novos projetos, grande abraço e até o próximo artigo.

    Links

    Visual Studio
    www.microsoft.com/visualstudio

    ASP.NET
    www.asp.net/

    Blogs do autor
    http://guintherpauli.blogspot.com
    http://twitter.com/guintherpauli