Desenvolvimento Web com .Net – MVC x WebForms

Olá pessoal, o debate MVC x WebForms se tornou muito popular e pretendo abordar o tema aqui também.

Ambas tecnologias são para desenvolvimento Web.

ASP.Net WebForms:

  • Existe desde 2001 (foi o primeiro modelo de desenvolvimento Web com .Net)
  • Tomou o lugar do ASP3 (a maioria dos sites migraram de ASP para ASP.Net)
  • É até hoje o modelo mais utilizado em desenvolvimento ASP.Net.

O WebForms facilitou muito a vida de quem trabalhava com WindowsForms ou VB6, segue o conceito de “drag and drop”, controles muito ricos como o GridView por exemplo com um simples arrastar e soltar.

O WebForms faz sozinho boa parte do trabalho de desenvolver para Web:

  • Gera HTML e JavaScript sozinho.
  • Controla o estado dos controles (postback / viewstate)
  • Os controles fazem praticamente tudo que precisa sem programação extra.

Com tudo isso temos uma boa lista de prós para o WebForms:

  • É RAD (Muito rápido de desenvolver).
  • Controles ricos.
  • HTML e JavaScript automático. “sem necessidade de programar”.
  • Gerenciamento do estado abstraído.
  • Designer Visual.

Mas também temos os contras:

  • Não se tem muito controle do HTML e JavaScript gerado.
  • Alguns controles não estão em conformidades com o W3C.
  • Difícil integração com frameworks JavaScript.
  • A UI (user interface) é quase impossível de se testar.
  • Problemas para utilizar SEO
* Muitas melhorias ocorreram na versão 4.0 do WebForms.

Para entendermos melhor as diferenças vamos fazer uma comparação.

ASP.Net MVC:

  • Segue o padrão arquitetônico de Model View Controller.
  • Faz separação de responsabilidades (cada letra de MVC com a sua).

Para esclarecer, o conceito do MVC não foi criado pela Microsoft (foi pela Xerox em meados de 70), porém foi muito bem adotado e revitalizado.

Quais os prós de se usar MVC:

  • Separação de responsabilidades (cada camada com a sua).
  • Testabilidade.
  • Reusabilidade.
  • Escalabilidade.
  • Manutenção facilitada.
  • Total controle do HTML e JavaScript gerado.
  • Suporta TDD em todos os apectos.

Muito bom né? Agora vamos aos contras:

  • Não é tão RAD quanto o WebForms.
  • Não disponibiliza controle prontos “drag and drop” (mas existem muitos free).
  • A curva de aprendizado é maior, há mais coisas para aprender.
  • Mais coisas para controlar, por ex, sessão de usuário.
  • É necessário desenvolver mais código.

Certo, já deu para balancear?
O que o MVC tem em comum com WebForms:

  • Ambos são ASP.Net (rodam sob o mesmo runtime).
  • Geram páginas ASPX.
  • Rodam no IIS.
  • Acessam dados livremente (ADO.Net, LINQ, Entity Framework).
  • São desenvolvidos no Visual Studio (para MVC é necessário baixar um complemento dependendo da versão do Visual Studio).

Acredito que com base nesses conceitos e diferenças já dá para ter uma ideia de qual abordagem é mais indicada para determinados projetos.

Muitos estão afirmando que o WebForms virou o ASP3 (clássico) ou seja está caindo em desuso. “Quando muitos gurus da tecnologia começam a fazer esse tipo de afirmação a tendência é que se torne uma verdade.”

Afinal qual dos dois escolher para meu próximo sistema Web?

Desenvolver um sistema Web, ASP.Net, desenvolvido em WebForms, na maioria das vezes pode (e vai) atender meu cliente, o que me motiva escolher MVC já que o esforço de desenvolvimento é maior?

As maiores vantagens são:

  • Controle total do HTML e JavaScript gerado.
    Seu site não vai ter o CSS quebrado ou uma função JS desconhecida gerada pelo   ASP.Net. Além de facilitar a compatibilidade com os browsers.
  • Possibilidade de testar a UI
    No WebForms isso é quase impossível, uma vez que não conhecemos o código que ele irá gerar. Para quem usa TDD é essencial ter todas as camadas testadas.
  • Reaproveitamento de código
    O código que é gerado com MVC é seu, você o conhece e o reaproveita onde quiser.
  • Aperfeiçoamento no conhecimento de CSS, HTML e JavaScript.
    Essas tecnologias por mais que bem conhecidas estão em alta, novidades como Windows 8, HTML 5 e o conceito da “Nova Web” são baseadas no uso destes conhecimentos, não dá mais para deixar de lado.

Até então todos desenvolvedores ASP.Net eram adeptos ao WebForms, logo nem sempre encontramos profissionais experientes em MVC (que já está na versão 4).

Cenário:
Você tem um projeto de um sistema web para fazer, o prazo é curto, o sistema não exige uma interface rica e customizada (ainda mais se for uma intranet) e sua equipe não tem conhecimento de MVC, vá de WebForms, não é nesse momento que deverá colocar em prática o aprendizado do MVC.

Eu mesmo gosto do WebForms (assim como já gostei muito de ASP3), trabalhei anos com ele, migrei para o MVC e aos poucos estou convertendo projetos para essa tecnologia.

Minha dica é:
Aprenda! Não deixe de aprender, experimente fazer um projeto em MVC, com o tempo e conhecimento a produtividade volta ao normal, e mais, você se manterá atualizado (MVC já é um pré-requisito para muitas vagas de desenvolvimento).

Por hoje é isso…
Pretendo continuar esse assunto abordando um novo conceito, chamado até então de “Nova Web”. Aguardem.

Quer compartilhar sua experiência? Tirar dúvidas? Utilize os comentários 😉

Referências:

16 ideias sobre “Desenvolvimento Web com .Net – MVC x WebForms

  1. DUVIDA:
    Para manipular dados no asp.net mvc é utilizado ViewData, viewbag etc…
    uma coisa q não achei em nenhum site é como o framework guarda essas informações, ou seja Grava em memória e depois mata?
    1 milhão de usuários conectado num site asp.net mvc e asp.net webforms qual fica mais pesado?

    • Olá Alexandre!

      ViewBag, ViewData e TempData são armazenados em memória como se fosse uma sessão, é uma persistência de curta duração apenas durante o ciclo de vida do request para aquela View, ou seja, se por ex. tentar acessar o valor de um ViewData em outra View, não será possível.

      Devido ao engine do MVC arrisco a dizer que o site em MVC se comportaria de forma mais rápida, vou procurar algum Benchmark confiável.

      Para entender melhor como funciona essa persistência é necessário o estudo dos internals do MVC, uma boa ideia para um futuro post!

  2. Bom dia,
    sou desnevolvedor Web .Net à 2 anos e quando comecei a desenvolver a empresa onde eu trabalhava usava MVP (Model-View-Presenter), gostei bastante e para quem não sabia nada de programação, veio muito bem. Quando eu saí de lá um dos Desenvolvedores me disse que o MVC era muito melhor e que valia apena estudar. A partir daí, fiquei com aquela pulga atrás da orelha: Será que é?! MVP já é maneiro!! Na empresa que entrei depois passei a usar WebForm (dividido em camadas, mas nada de MVC, MVVC, MVP e tals..). Hoje que estou com mais tempo livre na empresa (ainda nessa!) estou começando a estudar MVC e estou gostando muito! Já escutei isso várias vezes na Faculdade, só que para Java, nunca tinha me interessado de estudar para ASP.net, estou gostando e como curto os padrões W3C estou vendo que vai valer apena. Por mais que seja um padrão que tu escreva um pouco mais no início, depois (manutenção, melhorias e etc.) se torna muito mais fácil. O Pos ficou show. Eu tenho só uma dúvida, que até o momento não solucionei, quando usava WebForm, colocava os eventos dos clicks e validava e tals, como estou começando no MVC essa validação é feita como? Desde já agradeço a atenção.

    Grato

  3. Sou desenvolvedor ASP.Net desde a versão 1.1. Dediquei muito tempo em estudar o Asp.Net webforms, desenvolvi diversas aplicações, sistemas, etc, e agora resolvi tocar um projeto grande em MVC com meu time.
    A experiência que tenho para repassar é que o aprendizado tem sido muito tranquilo, e não impactou em nada na produtividade, já que o nosso padrão de arquitetura sempre busco separar as responsabilidade. Estamos sentido apenas diferença na implementação da UI, e seu blog tem nos auxiliado muito nisso.

    Parabéns pela iniciativa, você é grande merecedor do título de MVP!

  4. MVC Ok!! Show !!! Agora dizer q WebForms é muito mais fácil para desenvolver e menos código? Drag and drop? Ja tentou criar WebComponents? Já criou WebParts para o Sharepoint? Não, não estou falando de UserControl!! Sobre o não controle do HTML, Css e Js, não entendi onde não existe o controle? Não da para Debugar? JQuery é lindo, mas se não tomar cuidado com o que cuspir para o cliente processar, pode piorar a situação ao invés de deixar o processo para o Server resolver!!! MVC veio para ajudar a nós mortais desenvolvedores, mas não é utilizando ele e o nHibernante/Entity que qualquer um pode sair botando a mão sem quebrar nada!!! Um site, intranet funciona muito bem, afinal até com Joomla, WordPress se constrói qualquer coisas navegável. Já tentou sair do padrão ou desenvolver um projeto sem planejar a volumetria? Você joga mais um projeto (horas e dinheiro) no lixo se não escolher bem o que usar!!! Estou falando em um grande sistema com vários módulos e usuários utilizando simultaneamente!!! Esse comentário teve o objetivo apenas para ressaltar que o MVC não é a solução para todos os nossos problemas!! Tem que saber o que está fazendo com esse também!!! Diríamos que não se compara MVC com WebForms, e WebForms não é igual ao VB6. E mesmo no VB6, Drag Drop de controles não é desenvolver um sistema! Tem muito, mas muito mais!

  5. Olá Eduardo, ótimo post. Temos um e-commerce em produção com WebForms com EF 6 e gostaríamos de saber a sua opinião;

    1- Criar um novo projeto (New Project) em MVC e fazer tudo do zero, apenas aproveitando a camada de acesso a dados com EF que já existe, ou migrar por partes o projeto já existente em WebForms até que fique 100% em MVC ?

    2- Caso a opção de migrar por partes o projeto já existente seja escolhida, as duas tecnologias (WebForms e MVC) trabalhando juntas pode se tornar um problema ?

    Obrigado

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *