Esta é uma pergunta obsoleta com muitas respostas, mas nenhuma tinha a resposta que eu esperava que fosse listada.
A resposta curta é:
- Use o ASP.NET MVC se você pretende criar corretamente um aplicativo Web com convenções de programação modernas e padrões adotados pelo setor para a plataforma ASP.NET. No lado negativo, você deverá saber como o HTML e os recursos do lado do cliente (Javascript, CSS) funcionam, além de aumentar a mentalidade de programação do MVC, que possui uma curva de aprendizado acentuada, mas atinge um fim repentino quando é apreendida.
- Use o ASP.NET Web Forms se você estiver usando ou quiser usar uma abordagem de arrastar e soltar, centrada na GUI , RAD (Rapid Application Development) para criar protótipos de algo muito rapidamente, por exemplo, comportamento de botão / grade de dados conectado dentro 15 minutos, e a solução não se destina a ser algo suportado pelos desenvolvedores. Ou, use ASP.NET Web Forms se você tem experiência em desenvolvimento de GUI ou Windows Forms e deseja transferir seu conhecimento para a Web.
Mas, para analisar isso corretamente, você precisa entender a história de cada um.
O ASP.NET Web Forms foi a resposta da Microsoft para aqueles que estavam criando aplicativos Web dinâmicos usando controles ActiveX do Visual Basic 6, DLLs do VB6 no servidor e ASP Classic. Na época, o desenvolvimento da Web usando essas ferramentas da Microsoft era uma verdadeira bagunça. Juntamente com a totalidade do .NET Framework, que foi o resultado da Microsoft voltando basicamente à prancheta sobre como fazer programação de negócios produtiva na pilha do Windows, o ASP.NET Web Forms era, na época, incrível e bonito.
Toda a abordagem foi oferecer aos desenvolvedores o melhor dos dois mundos, algo muito semelhante ao desenvolvimento de aplicativos Windows, mas com o poder dos serviços de Internet. A idéia era que, assim como em um "Formulário" do VB6 / WinForms (uma janela), uma página da Web também é um formulário (como uma janela, consulte) , e nesse formulário você pode arrastar e soltar rótulos, caixas de texto, grades de dados, botões e outras coisas às quais os desenvolvedores de GUI do VB / WinForms estavam acostumados.
Para fazer um botão fazer alguma coisa, depois de arrastá-lo e soltá-lo, basta clicar duas vezes nele no designer e selecionar o editor de código, dizendo ao formulário o que fazer quando esse evento de "clique" acontecer. Foi exatamente assim que os desenvolvedores da GUI do Windows criaram software usando as ferramentas GUI do VB6 e as ferramentas concorrentes, mas agora o código está em execução no servidor! Uau!
Esta foi a tecnologia de 2002. Surpreendente e bonito em sua época, como resposta às soluções de GUI da Internet para o desenvolvimento de RAD , trouxe uma sensação de poder a um mundo confuso de desenvolvedores de software que tinham objetivos de negócios que precisavam realizar.
Infelizmente, esse modelo de programação enfatiza tanto a metáfora da programação da GUI do Windows que carrega consigo o ônus de seus detalhes de implementação necessários, toda a bagagem onerosa necessária para acomodar os ciclos de vida do evento e afastar os feios detalhes do HTML simples e script que esses componentes e controles de arrastar e soltar produziriam. E no final do dia, os desenvolvedores que suportam aplicativos reais inevitavelmente precisavam cavar fundo nesses componentes ou escrever seus próprios e, conseqüentemente, travavam batalhas com essa infraestrutura, batalhas que deixavam para trás pilhas e mais pilhas de cruft, cabelos arrancados e lágrimas.
Cópia de segurança. Lave suas mãos. Vejamos o problema de negócios novamente. Quais são os nossos objetivos de negócios?
Precisamos criar e gerenciar aplicativos da web . Nossas restrições são que temos a World Wide Web, que fica em HTTP, HTML, Javascript e CSS, e no servidor temos regras de negócios, bancos de dados e um pequeno punhado de ótimas linguagens de programação (por exemplo, C #). Realmente precisamos dessa metáfora da GUI do Windows para orientar nossa metodologia de desenvolvimento? Por que não podemos simplesmente focar nos problemas de aplicativos e acabar com as metáforas da GUI?
É aqui que entra o ASP.NET MVC. Tudo começou com uma rebelião de desenvolvedores que se autodenominavam "Alt.Net" que queriam voltar aos princípios de desenvolvimento de software adequados e puros. Chega de confusão e confusão, concentre-se apenas nos objetivos de negócios e nas melhores práticas de software.
O que isso realmente se traduz neste caso é:
- Separação de preocupações . Por exemplo, um componente de dados não precisa saber como seus dados serão renderizados, nem a marcação deve ser sobrecarregada com os detalhes de configuração da conexão com o banco de dados e, dessa forma, um desenvolvedor pode se concentrar em sua área de preocupação ao editar e código de teste.
- Exposição e suporte total à exposição ao âmago da questão do HTML e recursos relacionados . Nos Web Forms, o HTML está escondido, os desenvolvedores são desencorajados a se incomodar com isso. No ASP.NET MVC, os desenvolvedores são incentivados a gerenciar esses detalhes; na verdade, é uma necessidade. A vantagem aqui é que o desenvolvedor pode aprender novamente a apreciar a semântica limpa de HTML, CSS e script e trabalhar com ele em vez de contra ele.
- Testabilidade de objetos de negócios . Controladores e modelos são muito mais adequados para teste de unidade programática, para que as implementações possam ser validadas para atender aos objetivos de negócios, e é possível verificar as alterações para que não quebrem. Com os Web Forms, era difícil testar, pois os componentes não eram projetados para serem testados individualmente e toda a saída do desenvolvimento girava em torno dos formulários das páginas e dos ciclos de vida de seus eventos, com a imundície da lógica de negócios e da lógica de apresentação profundamente entrelaçada.
Observe que o HTML já é uma linguagem de marcação de alto nível, assim como o Javascript é uma linguagem de programação de alto nível. A história toda teria sido diferente se estivéssemos lidando com a linguagem Assembly e C.
Expandindo a segunda posição, outro objetivo do ASP.NET MVC é permitir que os desenvolvedores organizem os detalhes do front-end da parte 'view' de suas soluções e tirem vantagem da rica base que o restante do setor construiu a plataforma do cliente front-end.
Você descobrirá que os desenvolvedores do ASP.NET MVC se sentem em casa utilizando bibliotecas Javascript avançadas e técnicas de modelagem do lado do cliente sem brigar com a arquitetura do lado do servidor. Esse não era originalmente o caso dos Formulários da Web do ASP.NET, porque os Formulários da Web não querem que você veja o HTML ou o script, exceto se você realmente tiver que , nesse caso, cuidado, não é para os fracos de coração.