sexta-feira, 31 de outubro de 2014

Email: o POP3 está desactualizado, por favor mudar para o IMAP

Introdução

Quando se trata de aceder ao seu email, POP3 vs. IMAP não é apenas uma questão de preferência. O POP3 está antiquado, ultrapassado e não é adequado para o mundo moderno. O IMAP é o protocolo que deve usar.

O Exchange também é bom - se tiver algum tipo de conta de correio electrónico que usa o Exchange, então está bem. O Exchange funciona de forma semelhante ao IMAP, mas é um protocolo proprietário da Microsoft, que não está disponível em todos os lugares.

Conteúdo

Quando é que isto é importante?

POP3 vs. IMAP é uma escolha que tem que fazer quando usa um cliente de email para aceder ao seu correio electrónico. Esse cliente de email é muitas vezes um programa de desktop no Windows, Mac ou Linux, mas também pode ser uma app de smartphone ou tablet.

Se aceder ao seu email através de um interface Web ou uma app mobile oficial - como aceder ao Gmail com a respectiva app no Android ou iOS ou aceder ao Microsoft Outlook Mail no outlook.com - não precisa se preocupar com isso. simplesmente vai funcionar.

A Microsoft recusou-se a suportar o POP3 na aplicação de email incluída no Windows 8, sendo necessários alguns workarounds para aceder a uma conta de email POP3. Sendo que isto foi bastante controverso, pelo menos estão a empurrar as pessoas na direção certa - para longe do POP3, na direcção do IMAP ou do Exchange.

Porque é o POP3 mau?

O POP3 está apenas desactualizado. Este protocolo vem de uma época em que toda a gente acedia ao correio electrónico através de um programa desktop de email, num único computador. Provavelmente já teve um endereço de email fornecido pelo provedor de serviços de Internet (ISP) e era fornecida uma pequena quantidade de espaço de armazenamento de email no servidor - talvez 10 MB ou pouco mais. Quando abria o seu programa de email, ele descarregava todas as novas mensagens do servidor e guardava-as localmente, no seu computador. De seguida, eliminava as mensagens da sua conta de email online. Isso era necessário na época – tinha apenas alguns megabytes de espaço armazenamento na caixa de correio do servidor, e precisava mantê-la vazia, ou os emails enviados para seu endereço iriam começar a ser devolvidos de volta para os remetentes.

Isto fazia sentido nos anos 90 - tendo em conta as limitações da tecnologia - mas representa um grande problema hoje. Aqui está o porquê:

  • Só pode aceder ao seu email a partir de um único dispositivo. Depois de descarregar as mensagens para um dado dispositivo, não pode acedê-las a partir de outros. Numa época em que tem, pelo menos, um computador e um smartphone, isto é mau;
  • O POP3 depende da descarga de todos os seus emails. Então, se tiver novas mensagens com anexos grandes, terá que ficar à espera enquanto o programa transfere todos os seus emails para o seu computador;
  • Os seus emails são armazenados no seu computador local e não num servidor remoto. Isso significa que terá que se preocupar com backups manuais do arquivo do seu programa de email. Se o disco rígido tiver um problema, pode perder todo o seu correio electrónico.

Alguns serviços tentam contornar esta limitação, não apagando realmente os emails quando acedidos por POP3. Em vez disso, esses serviços só os marcam como lidos para que eles não sejam descarregado novamente. Este é um truque não muito limpo e tem um grande problema, também:

  • As suas ações de email não serão sincronizadas entre os seus dispositivos. Por exemplo, se o seu cliente de email descarregou uma mensagem e você ainda não a  leu, ela pode ser marcada como lida no servidor. Ou a mensagem pode nunca ser marcada como lida no servidor, mesmo depois de já a ter lido. Quando alterar o status de leitura de uma mensagem, destacá-la, apagá-la ou organizá-la em pastas, essas ações só serão salvas no programa de email no seu computador. Elas não serão sincronizados online para todos os seus outros dispositivos.

Porque é o IMAP melhor?

O IMAP é um protocolo mais moderno. Enquanto o POP3 apenas transfere tudo para o seu computador, para ser administrado localmente, o IMAP é mais um protocolo de sincronização. O IMAP sincroniza todas as alterações com o servidor e trata o seu servidor de email - e não o seu computador local - como o local primário onde o seu correio electrónico é armazenado.

Por exemplo, se aceder a uma conta de email com 1000 mensagens não lidas, através de IMAP, pode acedê-las instantaneamente. As mensagens não são copiadas para o dispositivo local até que as abra realmente - é claro que pode configurar o cliente de IMAP para fazer download automático de um determinado número de emails. Semelhante processo acontece com os anexos de email - só é feita a cópia a partir do servidor quando os abre (a menos que configure o cliente de email de outra forma). Quando abre uma mensagem, esta é marcada imediatamente como lida no seu dispositivo local, no servidor IMAP (por exemplo, no Gmail ou Outlook.com) e em todos os outros clientes IMAP que usar. Se organizar os seus emails em pastas, a sua organização vai ser sincronizada online. Se excluir um email, ele será excluído em todos os lugares - não apenas no seu dispositivo local.

Enquanto o POP3 transfere todos os seus emails e deixa-o geri-los no seu dispositivo local, o IMAP apenas fornece uma "janela" para a sua conta de email. Num mundo onde cada um de nós tem mais de um dispositivo - ou apenas quer deixar o seu email online, para não ter de se preocupar sobre como fazer backup e importação de ficheiros de email do desktop – o IMAP é a melhor solução.

Como usar o IMAP?

O IMAP é apenas uma opção que escolhe ao configurar sua conta de email num desktop, smartphone, tablet ou programa de email. Os programas de email mais antigos podem estar configurados para usar o POP3 por padrão, mas mesmo as aplicações de email do iOS ou do Android suportam ligações por POP3.

Porém, os programas de email modernos devem usar automaticamente o IMAP como padrão em vez do POP3. Vá à sua aplicação de correio electrónico e certifique-se de que está configurada para usar IMAP e não POP3, para aceder à sua conta de email!

thunderbird-email-account-settings-imap

Mas meu programa ou serviço de Email não suporta IMAP!

Se está a usar um cliente de email que não suporta IMAP, há muito tempo que o devia ter actualizado. Obtenha ainda hoje um cliente de email mais moderno – para desktop, o Mozilla Thunderbird é um cliente de email sólido, desenvolvido pelo mesmo fabricante do Firefox e o Microsoft Outlook é uma opção muito poderosa, se já tiver a respectiva licença do Microsoft Office.

Se o seu serviço de email não suporta IMAP e apenas suporta POP3, também é uma boa altura para criar uma nova conta. Por exemplo, se tiver um ISP que ainda lhe oferece 10 MB de armazenamento de email, que só pode aceder via POP3, provavelmente há 15 anos que eles não actualizam o seu serviço de email. Deve transferir-se para um serviço mais moderno. Serviços como o Gmail ou Outlook.com podem ir buscar o email à sua antiga conta POP3, para que possa ter tudo no mesmo sítio.

Não há realmente nenhuma boa razão para continua a usar o POP3, quando pode usar o IMAP. Sim, o POP3 pode garantir que as suas mensagens são apagadas da conta de email e só são armazenadas no seu dispositivo local, mas isso não ajuda muito – os seus emails são transmitidos em texto simples, logo alguém que esteja a monitorar o tráfego de Internet pode guardar cópias deles. O email é fundamentalmente inseguro, sob este ponto de vista, e certamente que o POP3 não o torna mais seguro.

 

Tradução livre do artigo "Email Basics: POP3 is Outdated; Please Switch to IMAP Today", de Chris Hoffman para a How-To-Geek.

quinta-feira, 30 de outubro de 2014

Porque a Microsoft adora o Linux

Algumas coisas não ficam bem juntas: cães e gatos, fãs do Real Madrid e do Barcelona, Windows e Linux, ... ou não é?

Em São Francisco, o CEO da Microsoft, Satya Nadella disse, e citamos, "A Microsoft adora o Linux".

Uau!

Percorreu-se um longo caminho desde que Steve Ballmer proclamou, em 2001, que "o Linux é um cancro". Nos anos que se seguiram, a Microsoft realmente atacou o Linux como se fosse um cancro, fazendo de tudo para o exterminar, desde patrocinar o ataque da SCO aos direitos de copyright do Linux, afirmar que o Linux violava patentes sem nome da Microsoft, até intermináveis ataques FUD.

Então, como é que o Linux passou de inimigo número um da Microsoft para seu "amor"?

Na realidade, Nadella explicou o cerne da questão, que podemos resumir na abordagem clássica duma história de detectives: "basta seguir o dinheiro".

Nadella disse à revista Wired que não está interessado em prosseguir com velhas lutas, especialmente quando, goste-se ou não, o Linux se tornou uma parte vital da tecnologia de hoje. "Se não abraçar a novidade…", disse ele, “…não vai sobreviver".

Ao fim de 22 anos, não há nada de realmente novo no Linux. Mas duas coisas são novidade: em primeiro lugar, o futuro do lucro da Microsoft não recai agora nos desktops ou nos programas desktop, mas no Azure, a sua solução cloud e em programas baseados em cloud, como o Office 365. Em segundo lugar, o Linux, mesmo na cloud Azure, é usado tanto por grandes como pequenas empresas e organizações.

Na verdade, Nadella admitiu que 20 por cento dos sistemas operativos no Azure são Linux. O sistema operativo open-source já contribui muito para a linha base da Microsoft. Hoje, o Azure ainda não suporta as distribuições comerciais Linux de topo, como o Red Hat Enterprise Linux, mas já suporta CoreOS Linux, CentOS, Oracle Linux, SUSE e Ubuntu.

Ao mesmo tempo, a Microsoft está consciente de que o Azure é o único sistema de nuvem puramente proprietário, em funcionamento. Todos os seus concorrentes - Amazon Web Services, Google Compute, OpenStack, etc. – correm em Linux e oferecem serviços de servidor Linux. Tivesse a Microsoft insistido apenas na linha Windows ou na linha de mais alto desempenho e não teria hipóteses.

Não é só o Linux que a Microsoft ama. Depois de décadas de resistência, a Microsoft suporta uma variedade de programas de código aberto, como o Hadoop (big data), Docker ou o Projecto Open Comute da Facebook. Na verdade, a Microsoft está mesmo a a abrir as suas próprias tecnologias ao open-source, tais como partes da Framewrok .Net.

A Microsoft também faz dinheiro diretamente com o Linux. As suas patentes Android, por muito questionáveis​​ que possam ser, ainda proporcionam mil milhões de dólares de receita a mais que o Windows Phone.

Se esteve com atenção, deve ter reparado que a Microsoft começou a mudar a sua atitude anti-Linux há anos atrás.

Já em 2008, Sam Ramji, na altura diretor de Estratégia de Plataforma de Tecnologia, da Microsoft e do Open Source Software Lab da empresa, disse: "A estratégia de código aberto da Microsoft está focada em ajudar os seus clientes e parceiros a serem bem sucedidos no mundo de hoje, de tecnologia heterogénea".

Podia-se ter pensado que era apenas a Microsoft a lançar fumo. Mas, de seguida, a Microsoft começou a mostrar que não estava apenas a falar por falar quando se tratava de desenvolvimento open-source.

Em 2011, a Microsoft já era o quinto maior contribuinte de código para o kernel do Linux. O que é que eles estavam a fazer? A certificar-se que o Linux poderia trabalhar com a virtualização da Microsoft – o Hyper-V. E o Hyper-V está no coração de Azure.

Como se pode ver, a paixão da Microsoft não é tanto pelo Linux e pelos sistemas open-source em si. O facto é que, em 2014, o mundo está a deixar o velho paradigma de computação desktop/aplicação e a dirigir-se para para uma abordagem de dispositivo/ serviços de nuvem. A Microsoft dirigiu o antigo. No entanto, para continuar a ser um competidor no novo paradigma, a Microsoft já percebeu que necessita trabalhar e jogar bem com os outros. Sim, mesmo até com o Linux.

 

Tradução livre do artigo “Why Microsoft loves Linux, de Steven J. Vaughan-Nichols, para a ZDNet.

segunda-feira, 27 de outubro de 2014

Email: Qual a diferença entre POP3, IMAP e Exchange?

Introdução

Hoje em dia, cada um de nós envia e recebe enormes quantidades de Email. No trabalho, em casa, nos nossos smartphones… Mas sabe o que significa todo aquele jargão do email?

Neste artigo vamos ficar a conhecer um pouco mais sobre a diferença entre as várias formas de receber email.

Se usa o Gmail, Hotmail, Yahoo Mail, ou Email configurado no seu próprio site, saiba que há mais sobre receber emails do que pode parecer à primeira vista.

Neste artigo, vamo-nos concentrar em alguns dos obstáculos mais comuns quando se trata da criação de novas contas de email e explicar as diferenças numa linguagem clara.

Para os leitores que já conhecem estas coisas, sintam-se livres de participar na discussão - deixem-nos saber como explicam aos vossos amigos, parentes e colegas de trabalho as diferenças de configuração de email mais comuns ... ou simplesmente compartilhem este guia e livrem-se do problema de explicar isto! Winking smile

Conteúdo

Clientes de Email vs Webmail 

Antes de descrevermos os diferentes protocolos para receber emails, vamos começar por perceber algo mais simples – a diferença entre os Clientes de Email e o Webmail.

Se já criou uma conta de Gmail, Hotmail ou Yahoo, é natural ter utilizado o webmail.

Por outro lado, se trabalho num escritório e usa um programa como o Microsoft Outlook, Windows Live Mail ou Mozilla Thunderbird para gerir o seu correio electrónico, então está a usar um cliente de email.

Quer o webmail quer os clientes de email são aplicações para enviar e receber correio electrónico e usam métodos semelhantes para atingir esse fim.

O Webmail é uma aplicação desenhada para ser operada através dum browser de Internet, geralmente sem necessidade de fazer download de qualquer software adicional. Todo o trabalho, por assim dizer, é feito por computadores remotos (ou seja, por servidores e máquinas a que se conecta através da Internet).

Os Clientes de Email são programas que estão instalados em máquinas locais (ou seja, o seu computador ou os computadores do seu escritório) e interagem com servidores de correio remotos, para receber e enviar email. Algum do trabalho de back-end de envio de email e todo o trabalho de front-end para criar uma interface de utilizador (aquilo que vê para receber o seu email) é feito no seu computador, pela aplicação instalada, ao invés do seu browser, com instruções do servidor remoto. No entanto, muitos provedores de webmail permitem aos utilizadores usar os clientes de email com o seu serviço - e aqui é onde a coisa se pode começar a tornar confusa. Vamos ver um exemplo rápido para explicar a diferença:

Nós criamos um novo endereço de email com o Gmail e começamos a enviar e receber mensagens através do serviço de webmail. A Google está-nos a fornecer duas coisas, um interface Web e um servidor de correio em back-end para enviar e receber emails. Nós comunicamos com a infraestrutura de servidor de email através do interface da aplicação webmail. Através do nosso apontar, clicar e digitar, estamos a dizer ao servidor de email a quem queremos enviar o email  e o que queremos dizer.

Mas podemos não gostar do novo visual da Google para o Gmail e, por isso, decidimos mudar para um cliente de email - como o programa gratuito Mozilla Thunderbird. Em vez de usarmos o nosso cliente baseado na Web (interface Web do Gmail) para interagir com os servidores do Gmail da Google (o servidor de correio em back-end), usamos um programa instalado no nosso computador (neste caso, o Thunderbird) para entrar em contacto com a infraestrutura de servidor de correio directamente, contornando completamente o webmail.

A Google (e outros provedores de webmail) oferecem todos estes produtos, incluindo o interface Web e o servidor de correio em back-end. Podemos usar os dois ou apenas o servidor de email e mesmo assim continuamos a usar o "Gmail".

Depois de esclarecido este ponto, vamos agora ver os protocolos de email mais comuns, que encontramos quando usamos webmail, clientes de email e os nossos smartphones.

POP3 (Post Office Protocol)

O POP, ou Post Office Protocol, é um modo de obtenção de informações de email que remonta a uma Internet muito diferente da que usamos hoje. Os computadores dispunham de um acesso limitado, de baixa largura de banda, a servidores remotos, pelo que os engenheiros conceberam o POP num esforço para criar uma maneira muito simples de receber cópias de emails para leitura offline e, de seguida, remover esses emails do servidor remoto. A primeira versão do POP foi criada em 1984 e a revisão POP2 no início de 1985.

O POP3 é a versão atual deste estilo particular de protocolo de email e ainda continua a ser um dos mais populares. Como o POP3 cria cópias locais dos emails e apaga os originais do servidor, os emails ficam acoplados à máquina específica onde são recebidos e não podem ser acedidos através de webmail ou qualquer outro cliente noutros computadores. Pelo menos, não sem fazer um monte de encaminhamento de email ou exportar e copiar ficheiros de caixa de correio.

Enquanto o POP3 é baseado num modelo mais antigo de email offline, não há nenhuma razão para considerá-lo uma tecnologia obsoleta, uma vez que tem seus usos. O POP4 foi proposto e pode ser desenvolvido um dia, embora não exista grande progresso há vários anos.

IMAP (Internet Message Access Protocol)

O IMAP foi criado em 1986, mas parece se adequar-se muito bem ao mundo moderno da Internet onipresente, sempre conectada. A ideia era libertar os utilizadores de estarem amarrados a um único cliente de correio electrónico, dando-lhes a capacidade de ler os emails como se estivessem "na nuvem".

Comparado com o POP3, o IMAP permite que os utilizadores façam logon em diferentes clientes de email ou interfaces de webmail e vejam as mesmas mensagens, porque os emails são mantidos nos servidores de correio electrónico remotos até que o o utilizador os elimine explicitamente. Num mundo actual, em que verificamos o nosso email em interfaces Web, clientes de email e em dispositivos móveis, o IMAP tornou-se extremamente popular. Não sem os seus problemas, no entanto.

Como o IMAP armazena emails num servidor de correio remoto, o utilizador tem uma caixa de correio de tamanho limitado, dependendo das definições fornecidas pelo serviço de email. Se tiver um grande número de emails que deseja manter, pode esbarrar em alguns problemas de envio e recebimento de email, quando a sua caixa estiver cheia. Alguns utilizadores contornam este problema, criando cópias de arquivo locais, através do seu cliente de email e, em seguida, eliminam as mensagens do servidor remoto.

Microsoft Exchange, MAPI e Exchange ActiveSync

A Microsoft começou a desenvolver o MAPI (Messaging API), não muito tempo depois do IMAP e do POP, embora este tenha usos além do simples email. Fazer uma comparação exaustiva entre o IMAP e POP e o MAPI é um tema bastante técnico e fora do alcance de muitos leitores deste artigo. Simplificando, o MAPI é uma forma de aplicações e clientes de email comunicarem com servidores Microsoft Exchange, e tem capacidades de sincronização ao estilo do IMAP de emails, contactos, calendários e outros recursos, tudo agarrado a clientes de email locais ou aplicações. Esta função de sincronização de emails é denominada pela Microsoft como "Exchange ActiveSync". Dependendo do dispositivo, telefone ou cliente que se usar, esta mesma tecnologia pode ser chamada de qualquer um dos três produtos da Microsoft (Microsoft Exchange, MAPI ou Exchange ActiveSync), mas vai oferecer a mesma sincronização  de email baseado na nuvem, como o IMAP.

Como o Exchange e o MAPI são produtos da Microsoft, apenas as entidades que possuem os seus próprios servidores de correio Exchange, ou usam o Windows Live Hotmail, são capazes de usar o Exchange. Muitos clientes de correio electrónico, incluindo os clientes de email padrão do Android e iPhone, são compatíveis com o Exchange ActiveSync, oferecendo aos utilizadores do Hotmail uma solução de email baseado na nuvem, ao estilo do IMAP, apesar do Hotmail não oferecer verdadeiramente a funcionalidade de IMAP.

Outros protocolos de Email

Existem outros protocolos para envio, recepção e utilização de email, mas a maioria de nós usa o velho e simples webmail gratuito e smartphones e estará a usar um destes três grandes. Uma vez que estas três tecnologias cobrem as necessidades de quase todos os leitores, não vamos gastar tempo a falar sobre outros protolocos. Se tiver alguma experiência com o uso de outros protocolos de email, sinta-se à vontade para discuti-los nos comentários.

Qual devo usar para criar o meu Email?

Dependendo do seu estilo pessoal de comunicação e a partir de quem prefere obter o seu serviço de email, pode rapidamente reduzir as opções para criar o seu Email:

  • Se costuma verificar o seu email a partir de uma série de dispositivos, telefones ou computadores, configure os clientes de email para usar IMAP;
  • Se usa principalmente webmail e quiser usar o seu smartphone ou iPad para sincronizar com o seu correio electrónico, utilize o IMAP também;
  • Se estiver a usar um cliente de email numa máquina dedicada (digamos, um computador no seu escritório), pode estar confortável com o POP3, mas recomenda-se o IMAP;
  • Se tem um enorme histórico de email para guardar e estiver a usar um provedor de email antigo, com pouco espaço na sua caixa de correio, pode querer usar o POP3 para evitar a falta de espaço no servidor remoto;
  • Se usa o Hotmail ou um Email baseado em Exchange Server, o MAPI ou o Exchange ActiveSync oferecem sincronização baseado na nuvem, semelhante ao IMAP;
  • Se não usa o Hotmail e quer sincronizar emails, use o IMAP. Mas se usa Hotmail e desejar sincronização de email, então use o MAPI / Exchange ActiveSync.

Esperamos que se tenham dissipado muitas das suas perguntas sobre estes caminhos mais comuns para recebermos dados de email com os nossos telefones e computadores.

 

Tradução livre do artigo “Email: What’s the Difference Between POP3, IMAP, and Exchange?”, de Eric Z Goodnigh para a How-To-Geek.

domingo, 26 de outubro de 2014

ASP.NET MVC vs ASP.NET Web Forms – Porquê o MVC?

Introdução

Conforme já tínhamos apresentado em artigo anterior, a tecnologia ASP.NET MVC foi introduzida pela Microsoft, na Framework .NET, em 2009.

Se repararmos, nos últimos anos, o foco da Microsoft tem sido o MVC, MVC e MVC. Então a questão que se coloca é porque razão a Microsoft está tão interessada em abandonar uma tecnologia bem sucedida como as ASP.NET Web Forms e persuadir a comunidade de desenvolvimento Web a adoptar o ASP.NET MVC?

Não me interpretem mal, existem milhares e milhares de aplicações baseadas em ASP.NET Web Forms que necessitam de suporte e evolução e esta tecnologia continua a existir no ecossistema da Framework .NET. Continuamos a poder criar novas aplicações baseadas em Web Forms. A questão é perceber se esta continua a ser a melhor opção.

Conteúdo

Desambiguação

Antes de iniciarmos a abordagem ao tema proposto, convém fazer uma pequena desambiguação. Para muitos programadores, o ASP.NET é diferente do MVC, o ASP.NET é uma tecnologia antiga, enquanto o MVC é a novidade. Não é bem assim, o ASP.NET e o MVC não são coisas distintas. O MVC faz parte do ASP.NET.

O ASP.NET é a framework Web da Microsoft. O MVC é um modelo de programação, construído em cima do ASP.NET. O que podemos classificar como antigo, em relação ao MVC, é o modelo de programação das Web Forms.

image

Podemos confirmar esta situação ao criar uma nova Aplicação Web no Visual Studio:

As Web Forms e o MVC são apresentados como dois modelos (templates) de desenvolvimento de uma aplicação ASP.NET.

A vitória das ASP.NET Web Forms

Uma das principais razões para a rápida adopção do ASP.NET foi, sem dúvida, o facto de se tratar de uma abordagem RAD ao desenvolvimento Web. Com as Web Forms, a Microsoft, basicamente, estendeu o modelo de programação do Visual Basic, para a Web, permitindo a utilização de técnicas de drang-and-drop e de point-and-click, comuns no desenvolvimento para Windows. O modelo das Web Forms abstraía uma série de funcionalidades para apresentar uma simulação do modelo stateful (com estado) do Windows, aos programadores Web. Como resultado, não é necessário ser um especialista, com um profundo conhecimento de HTML e Javascript, para conseguir criar aplicações Web eficazes.

Podemos resumir algumas das vantagens das ASP.NET Web Forms:

Controlos Servidor ricos

Quando se trabalha com HTML puro, as coisas não são sempre as mesmas em todos os lugares, como já deve ter notado. Um UI que parece óptimo no IE pode ficar distorcido no Firefox ou vice-versa.

Um controlo de servidor ASP.NET detecta o navegador Web e gera o HTML adequado e, se necessário, Javascript também.

Muitos controlos de servidor como o GridView e o ListView possuem recursos de data-binding, que permitem a redução de muitos esforços e a escrita de muito código.

Suporte de ViewState

Já deve ter lido várias vezes que "o HTTP é um protocolo sem estado (stateless)". Os controlos não mantém os seus valores entre Requests. Para simular a programação stateful, as Web Forms introduziram funcionalidades como o viewstate e postbacks. O último estado conhecido de todos os controlos é guardado na própria página, na forma de um campo oculto chamado ViewState.

O code-behind

Quando está a desenvolver uma aplicação web, o programador faz drag-and-drop dos controlos no designer da form e o Visual Studio cria o código por trás (code-behind). Enquanto o programador ajusta visualmente o layout da web form, actuando no ficheiro aspx, o código é colocado numa classe parcial, num ficheiro aspx.cs (ou aspx.vb).

Estes ficheiros de code-beind foram a chave para o sucesso do desenvolvimento e entregas mais rápidas das aplicações baseadas em ASP.NET Web Forms. Os programadores puderam-se abstrair de muitos detalhes técnicos, como eventos, protocolo HTTP, POST, GET, gestão de sessão, etc.

Programação baseada em Eventos

Com a ajuda de:

  •  code-behind
  • Mecanismo de postback (fazer post de volta à mesma página)
  • ViewState

a Microsoft introduziu a programação baseada em eventos (event-driven) no mundo da Internet.

O programador já não necessita usar métodos POST e GET para lidar com as interações do utilizador com o servidor. Basta arrastar um controlo (p.ex. um botão) para a página, clicar duas vezes sobre o mesmo e é gerado um bloco de código para a manipulação do evento clique no servidor.

Eram precisamente estas características que, anos antes, os programadores de páginas ASP procuravam. Além disso, as ASP.NET Web Forms até conseguiram superar essas expectativas, fornecendo uma camada de abstração total em cima de toda a pilha Web: Javascript, CSS, HTML.

Menor esforço de aprendizagem

Com a utilização de controlos de servidor ricos, o ViewState e eventos, conforme já afirmamos acima, não é necessário ser um especialista, com um profundo conhecimento de HTML e Javascript, para conseguir criar aplicações web eficazes.

Os problemas das ASP.NET Web Forms

Já vimos que o code-behind foi a principal razão do sucesso das Web Forms, mas a forma como é posicionado e invocado, provoca alguns problemas sérios. Vamos então analisar alguns destes problemas e depois vamos ver como a evolução para o MVC ajuda a lidar com os mesmos.

Arquitectura do projecto

Não existe uma Arquitectura de Projecto predefinida para aplicações Web baseadas em Web Forms. Os programadores têm total flexibilidade para escolher a sua própria arquitectura.

Pode-se usar a arquitectura base de 3 camadas, dividindo o sistema em UI, Camada de Negócio e Camada de Acesso a Dados ou um modelo mais avançado como o Model-View-Presenter. Mas muitos programadores acabam por escolher usar apenas o code-behind e escrevem lá todo o código da aplicação, o que não é de todo considerado uma boa prática. O code-behind está fortemente acoplado ao UI, acabando sempre por ter uma lógica de apresentação e não de negócio ou acesso a dados.


Solução baseada em Views (view-based) para requisitos baseados em Acções

Os websites existem para os utilizadores finais. Os utilizadores chegam a um website com um propósito específico e comunicam esse propósito por acções. P.ex., numa rede social, o utilizador comunica os seus propósitos através de acções como:

  • Partilhar imagem
  • Escrever comentário
  • Enviar mensagem

Estas acções são comunicadas através de cliques do rato, ou do URL no browser. Devido a esta estrutura baseada em acções, foi escolhido o protocolo HTTP para a Web, porque tem acções como GET, POST, PUT, DELETE, etc. que comunicam as intenções do utilizador de uma forma mais clara. Se conseguirmos mapear estas acções para métodos ou funções do nosso programa, faz mais sentido e mantém a arquitectura mais simples.

Mas as ASP.NET Web Forms tinham um problema, queriam manter o conceito RAD, implementado através da programação visual e por isso acabaram por oferecer uma solução baseada em Views (view-based), para uma estrutura baseada em Acções (action-based).

A arquitectura, em si, não está adaptada, do ponto de vista lógico, à abordagem baseada em acções, do utilizador final. Dito de outra forma, se um utilizador envia uma acção “Compra”, primeiro ela chega a uma view como “Loja.aspx” que, por sua vez, chama a “Loja.aspx.cs”, que executa um ciclo complexo (page life cycle) que, finalmente, executa a acção que responde ao pedido do utilizador.

Isto é bastante confuso. Os pedidos são mapeados para uma acção real apenas depois de se completar um complexo ciclo da página.

Efeitos secundários de uma má arquitectura – Alto Acoplamento

Quando se começa com uma arquitectura incorrecta, acaba-se por fazer ajustes que vão provocar efeitos secundários graves. É o que acontece neste caso. O code-behind que pode parecer ser fisicamente diferente, colocado num ficheiro à parte, nunca foi, na verdade, desacoplado, i.e. o ficheiro aspx.cs (ou aspx.vb) nunca pode ser separado do respectivo ficheiro aspx.

Por outras palavras, não é fácil anexar o código “Cliente.aspx.cs” à viewDetalhesCliente.aspx”. O code-behind está intimamente ligado à view. Não é reutilizável.

O HTML não é o único tipo de resposta 

Por causa da forte ligação entre a view e o code-behind, até mesmo o tipo de resposta é fixo nas Web Forms – HTML por defeito. Se desejar alterar o tipo de resposta, terá que lidar com tipos de conteúdo e métodos "Response.End", o que é complexo e trabalhoso.

Combinação de View e dados 

Quando enviamos uma resposta a um utilizador, esta é uma combinação de view (display) e de dados (modelo). Como as Web Forms são uma arquitectura view-first, é a view que vai decidir qual o modelo a conectar, o que a torna pouco flexível, para além de estarmos a envolver a view em tomadas de decisão complexas. Isto viola claramente o princípio SRP (SOLID) (pode ler mais sobre os Princípios SOLID aqui).

Fazer do code-behind uma classe normal para Testes Unitários 

O code-behind de uma Web Form é tipicamente uma classe parcial volumosa e pesada, que não pode ser instanciada através de código simples. Lembre-se que o ecran da Web Form herda da classe "System.Web.UI.Page". Esta classe de página não podem ser criada diretamente, pois tem muitas dependências.

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    public void Button1_Click(object sender, EventArgs e)
    {
        Session["SomeSession"] = "Is this set";
    }
}

Podemos agora perguntar por que razão queremos instanciar directamente esta classe de página. Bem, um lugar onde eu gostaria de a instanciar seria para realizar Testes Unitários. Gostaria de invocar as acções do método Click do botão e testar se as variáveis de sessão são definidas correctamente, se o estado da view está correcto, etc.

Mas se tentar criar um método de teste para esta classe, vai acabar com um código semelhante ao mostrado abaixo.

[TestMethod]
public void TestMethod1()
{
    WebApplication1.WebForm1 obj = new WebApplication1.WebForm1();

    obj.Button1_Click(this, new EventArgs());
}

Para além de ser um pouco estranho, quando o código do teste for invocado vai pedir mais coisas e gerar erros que tornam os testes unitários do UI impossíveis de realizar.

Performance

O ViewState é uma solução para alguns dos problemas das ASP clássicas, mas também se torna um problema em si próprio. O ViewState é armazenado na própria página pelo que tem que ser passado do cliente para o servidor e de novo do servidor para o cliente em cada acção de GET ou POST. Estamos a passar mais e mais dados, o que provoca uma visível degradação da performance.

Menor controlo sobre o HTML gerado

Nas Web Forms, muitas vezes não sabemos exactamente que HTML é gerado, tornando a integração com frameworks Javascript, como o jQuery, numa tarefa difícil.

SEO (Search Engine Optimization)

Os URLs apontam para páginas ASPX fixas que podem ainda ser decoradas com uma string de consulta. Eles não são, obviamente, user-friendly e afetam o SEO.

Desenvolvimento paralelo

A página ASPX está intimamente ligada ao code-behind. Logo não é possível ter dois programadores diferentes a trabalhar na mesma secção (um no aspx e o outro no code-behind) em simultâneo.

ASP.NET 4.0

Em 2010, a Microsoft lançou a nova versão ASP.NET 4.0, que inclui algumas boas características para superar alguns dos problemas acima:

  • ViewState: permite desabilitar ou controlar o tamanho do ViewState (mas não há nenhuma regra ou obrigatoriedade de o fazer);
  • URL Routing: passamos a poder fornecer o nosso próprio URL em vez do caminho físico da página;
  • ID: No ASP.NET 4.0 temos maior controlo sobre o Id dos elementos e, assim, a integração com uma framework Javascript tornar-se mais fácil. (mas ainda não temos o controlo completo sobre HTML que é gerado).

Mesmo após a evolução das características revolucionárias do ASP.NET:

  • Ainda não foi possível resolver os problemas com os Testes Unitários;
  • É quase impossível encontrar um programador de ASP.NET Web Forms que tenha desabilitado o ViewState;
  • Temos algum controlo sobre o Id dos elementos, mas não o controlo completo sobre o HTML gerado, mantendo-se o problema de implementar Javascript.

As vantagens do ASP.NET MVC

O ASP.NET MVC é mais uma framework de desenvolvimento Web da Microsoft, desenhada com a separação de conceitos e testabilidade em mente. Está construída sobre o CLR e completamente baseada no Padrão MVC. Por isso pensamos em termos de controladores e views.

O ASP.NET MVC não tem suporte para ViewState nem controlos de servidor, de modo que se sente um pouco da “velha” Web por aqui.

Vejamos algumas das vantagens do ASP.NET MVC:

Arquitectura do projecto

Uma das grandes vantagens de usar ASP.NET MVC é que impõe a separação de conceitos. Portanto, há muito menos hipóteses de tornar as coisas demasiado complexas ou fortemente acopladas.

Solução baseada em Acções (action-first)

Como vimos anteriormente, as Web Forms implementam uma arquitectura baseada em Views (view-first). Então como podemos transformá-la numa arquitectura orientada por acções em vez de orientada por views?

Que tal chamar primeiro a Acção e depois a acção escolhe a view? Faria com que o fluxo fosse mais lógico e claro. Isto é exactamente o que a arquitectura do MVC faz. A primeira chamada chega a uma Acção, que pertence a um Controlador e o controlador chama a View com o Modelo apropriado.

Baixo Acoplamento

A nossa arquitectura baseada em acções, permite-nos reutilizar o código duma acção em diferentes views. Por exemplo, se um utilizador enviar a acção “Display”, pode ser exibida a view DispalyDesktop.aspx” ou a viewDisplayMobile.aspx”, dependendo do tipo de dispositivo usado.

imageAssim, na acção MVC, dependendo da situação, podemos invocar a "MobileView" ou "DesktopView". Abaixo está um pequeno exemplo de código que ilustra este exemplo. Agora podemos tentar imaginar conseguir o mesmo efeito, directamente, no code-behind das Web Forms. Difícil, muito difícil mesmo.

public ActionResult Index(string deviceType)
{
    if (deviceType == "Mobile")
    {
        return View("Mobile");
    }
    else
    {
        return View("Desktop");
    }
}

O HTML não é o único tipo de resposta 

Ao usarmos uma estrutura action-first, então a acção pode dar-se ao luxo de decidir que tipo de tipo de resposta deve produzir. Isto torna o nosso sistema mais flexível em termos de uma mesma acção com diferentes outputs.

Abaixo está mais um pequeno exemplo de uma ação MVC, que envia um resultado JSON ou HTML, dependendo do valor do parâmetro. Este tipo de flexibilidade é difícil de conseguir com nas Web Forms, porque forma desenhadas para retornar apenas HTML.

public ActionResult Index(string viewType)
{
    if (viewType == "JSON")
    {
        return Json(new Customer(), JsonRequestBehavior.AllowGet);
    }
    else
    {
        return View("DisplayCustomer", new Customer());
    }
}

Combinação de View e dados 

Numa arquitectura action-first, o pedido chega primeiro à acção e esta escolhe a view e o modelo para retornar diferentes respostas.

image

Vejamos mais um pequeno exemplo em que uma acção MVC usa o mesmo modelo anexado a diferentes views. Neste exemplo, temos o modelo "CustomerData” que é anexado à viewDetailCustomer”, mas que noutra situação é anexado à viewCustomer”.

public ActionResult Index(string ViewName, Customer customerdata)
{
    if (ViewName == "Detailed")
    {
        return View("DetailCustomer", customerdata);
    }
    else
    {
        return View("Customer", customerdata);
    }
}

Este tipo de flexibilidade é muito difícil de alcançar através das Web Forms, porque a invocação do modelo está na própria view. Em seguida, é necessário escrever toda a lógica de decisão dentro do ciclo de vida da página e finalmente redirecionar para outra view, tornando a implementação muito pouco clara.

Testabilidade

No caso do MVC, um Controller é uma classe normal. Uma classe que pode ser instanciada num projecto de testes unitários simples, onde se podem facilmente testar vários aspectos, como a sessão, ViewBag, TempData, etc. Os controladores não estão acoplados a qualquer view específica, por isso pode ser reutilizados para realizar os testes necessários.

public class HomeController : Controller
{
    public ActionResult Index()
    {
        Session["SomeSession"] = "Is this set";
        return View("SomeView");
    }
}

Performance

O ASP.NET MVC não tem suporte para o ViewState, de modo que não haverá qualquer gestão automática do estado, o que reduz o tamanho da página permitindo assim aumentar a performance.

Total controlo sobre o HTML

O ASP.NET MVC não suporta controlos de servidor. A única opção disponível é usar controlos de input do HTML, por isso sabemos exactamente que HTML vai ser gerado no final. Também vamos estar cientes sobre o Id de cada elemento. E assim a integração com bibliotecas Javascript, como o jQuery, torna-se bastante fácil.

SEO, URL Routing e REST

Fortes recursos de roteamento permitem tratar cada URL como um recurso com suporte a interfaces RESTful. Para além disso, são user-friendly e melhoram o SEO.

Desenvolvimento paralelo

No ASP.NET MVC as camadas têm baixo acoplamento entre si, pelo que um programador pode trabalhar num controlador, ao mesmo tempo que outro trabalha na View e um terceiro desenvolve o modelo. Tudo em simultâneo. É isto o chamado desenvolvimento paralelo. Smile

Extensibilidade

O ASP.NET MVC suporta múltiplos motores de views, como o ASPX ou o Razor e, se necessário, podemos criar o nosso próprio motor.

Recursos ASP.NET existentes

O ASP.NET MVC é construído em cima da framework ASP.NET e, portanto, fornece ao programador a utilização de muitas características boas, como a autenticação de formulários, a autenticação do Windows, cache de sessão, etc.

A solução ASP.NET MVC

Para mudar de uma arquitetura baseada em views para uma arquitectura baseada em acções MVC, é necessário fazer algumas alterações estruturais.

A figura acima dá uma ideia dessas alterações:

  • Mover o code-behind para uma classe do tipo Controller, convertendo os eventos em métodos to tipo Action;
  • A Middle-layer ou Camada de Negócio transforma-se no Model, que fornece dados e aplica lógica e regras;
  • A View só faz a exibição, posicionamento e layout dos dados;
  • A DAL e outras camadas não mudam muito, já que não têm uma grande ligação com a questão do code-behind, diretamente.

Assim, com a arquitetura MVC temos o seguinte fluxo de três etapas:

  • O utilizador final envia um Request. A aplicação direciona o Request para o controlador. O controlador é uma unidade lógica que agrupa um conjunto de acções;
  • O controlador mapeia o Request para uma acção particular;
  • Agora a ação tem duas tarefas para realizar, primeiro necessita obter os dados apropriados e de seguida esses dados têm que ser ligados à view adequada. A Acção cria o objeto do modelo e liga o modelo à view, para enviar a resposta final.

O que perdemos?

A maior vantagem das ASP.NET Web Forms é o RAD / Programação Visual. Mesmo que seja uma forma mais “suja” de fazer as coisas, pode ajudá-lo a completar as aplicações mais rapidamente e satisfazer os clientes num mais curto espaço de tempo. Mas esta rapidez tem um preço a longo prazo.

Outra questão é que o ASP.NET MVC tem uma maior curva de aprendizagem. A ausência de ViewState e dum modelo de programação orientado por eventos torna  o ASP.NET MVC um pouco difícil para os programadores com pouca ou nenhuma experiência em desenvolvimento de aplicações Web.

Conclusões

A grande questão que se coloca sempre nestas alturas é quando e porque devemos utilizar determinada tecnologia em detrimento de outra.

Existem dois factores que determinam de imediato a escolha da tecnologia a usar:

  • Se é fundamental entregar um resultado muito rapidamente, então as Web Forms são a única opção, uma vez que nem se pode sequer considerar o ASP.NET MVC para RAD (as razões para necessitar de RAD podem estar relacionadas com o cliente estar a pagar pouco pelo projecto, ou a aplicação vir a ser usada apenas durante poucos meses e não exigir muita manutenção);
  • Se a testabilidade da aplicação, em particular Testes Unitários, for fundamental, então a única opção é mesmo o MVC.

Para além destas razões, a sugestão é dar prioridade à utilização do ASP.NET MVC. É uma evolução da framework ASP.NET, resolve a maioria dos problemas identificados nas Web Forms, permite uma grande testabilidade das aplicações e óbvios ganhos a longo prazo em termos de manutenção. Podem-se ainda ponderar os seguintes factores:

  • A equipa de desenvolvimento tem uma boa experiência de Web Forms e Windows Forms? Então deve-se levar em conta a curva de aprendizagem do MVC e a disponibilidade (mental e de tempo) da equipa para efectuar a transição. Poderá optar-se por manter as Web Forms em detrimento do MVC, mas com os custos e problemas anteriormente identificados;
  • A equipa tem experiência em ASP ou em tecnologias não-Microsoft, como Android, iOS, JSP, Ruby, PHP? Este tipo de tecnologias costuma usar a arquitectura MVC por defeito, pelo que será um passo natural usar o ASP.NET MVC;
  • O JavaScript vai ser amplamente usado? Mais uma vantagem para o MVC;
  • A performance é um factor importante? O MVC, sem o suporte para o ViewState oferece um bom ganho de desempenho em relação às Web Forms;
  • Prevê-se a reutilização da mesma lógica de input? Usar o MVC, sem dúvida.

Como resumo final, podemos dizer que as ASP.NET Web Forms foram o caminho correcto para a Microsoft em 2000. O objectivo era atrair os programadores de VB6, VF e VC++, que eram viciados em programação RAD. As Web Forms atingiram o seu objectivo, mas agora está na hora de evoluir e avançar na direcção de uma melhor arquitectura, ou seja o MVC.

Referências

http://msdn.microsoft.com/en-us/magazine/dd942833.aspx#id0080030

http://www.codeproject.com/Articles/821275/Webforms-vs-MVC-and-Why-MVC-is-better

http://www.codeproject.com/Articles/528117/WebForms-vs-MVC