Mais um post da série de polêmicas, que andava meio parada, ainda mais depois da acalorada discussão sobre software livre X software proprietário que teve aqui.

Esse é um assunto que está guardado para eu falar faz tempo, e que não tem dado tempo. É uma discussão semi-religiosa… Tem gente que adora Website, tem gente que odeia. A mesma coisa com web application. Eu? Eu não gosto de Websites, acho-os menos profissionais, confusos, e vou mostrar porque.

Para quem quiser, a Microsoft faz uma comparação entre os dois tipos de projeto no seu artigo sobre introdução a projetos de web application.

Ao que tudo indica, minha opinião segue o que a Microsoft está fazendo, já que os projetos de website estão sendo escondidos e morrendo devagar. Vejam por exemplo, a página inicial do Visual Studio 2005:

Visual Studio 2005

Agora vejam a do Visual Studio 2008:

Visual Studio 2008

E a do Visual Studio 2010:

Visual Studio 2010

 

Notaram que não há mais Create Web Site já a partir do Visual Studio 2008? Você tem que ir no File > New > Website para criar um website. Ao clicar no ícone de "New Project" do Visual Studio 2010 uma janela de criação de projetos aparece, não a de websites. Para criar websites o procedimento é o mesmo do Visual Studio 2008: File > New > Website.

Isso significa que o template de Website morreu? Claro que não, afinal muito código foi escrito com ele, mas sem dúvida ele está em segundo plano, virou o patinho feio. O ASP.Net MVC, por exemplo, nem possui o template de website, só o de web application. E como ele está em beta, isso significa que está feature complete, e não deve ter mesmo.

E porque eu gosto mais de web application? Primeiro porque o resultado é uma DLL. Eu faço o trabalho e ele vira um executável. Nada de "sob demanda". Para atualizar é só subir um arquivo, e ele tem sempre o mesmo nome. Já se você usa website, cada hora que você publica são geradas várias DLLs, e elas têm nomes diferentes.

A idéia de criar uma dll por diretório, que é o que acontece no website também é muito ruim. Você pode acabar tendo problemas de referência circular em um mesmo website, só porque dois diretórios se referenciam, e, com isso, as DLLs não podem ser geradas. É um problema simples de resolver, mas é chato e desnecessário.

Adicionar referências em websites também é complicado. Websites usam o web.config para manter a lista de referência, mas se você coloca uma DLL no diretório bin ela vira uma referência automaticamente. Isso é meio irritante também. Eu gosto da minha pastinha virtual de "References".

Também não gosto da idéia de que qualquer arquivo que está no diretório faz parte do website. Isso é muito incômodo, principalmente se você trabalha com controle de versão. Aliás, controle de versão com website dá trabalho. Com web application não dá, é um projeto como qualquer outro.

E aquele diretório App_Code? É o fim! Não gosto de ter que colocar minhas classes em um lugar específico.

E vocês sabiam que não dá para adicionar build steps antes ou depois da compilação de um website? Sabem porque? Porque não tem um arquivo vbproj ou csproj, e é lá que esse tipo de coisa fica. Aliás, configurar tudo via web.config é também uma dor de cabeça desnecessária. A falta da aba de propriedades de projeto é muito grande.

Migração de aplicações ASP.Net 1.x para website também são infernais. Para web application é tão simples quanto alguns cliques.

Há uma vantagem no website: uma só. É a capacidade de alterar o code behind e ele imediatamente refletir na aplicação, sem precisar recompilar. Basta salvar o arquivo cs ou vb e acabou. Mas sinceramente, ela não vale a dor de cabeça do resto.

Enfim, estes são meus motivos. Quando chego para uma consultoria e vejo um website eu já sei que a chance de ter problemas é bem maior. Não gosto nem de editar artigos da .Net Magazine com websites. E vocês, compartilham da minha opinião, ou gostam de websites? Se gostam, porque?

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.