Tugwar-cabodeforca

Um tempo atrás eu indiquei quando usar ASP.Net Webforms ou MVC. Agora vamos a outra dupla igualmente polêmica: WF (Windows Forms) ou WPF (Windows Presentation Foundation).

Eu não gosto de recomendações sem contexto. Mas se fosse para dar uma recomendação sem contexto, seria essa:

Use WPF.

Mas a idéia não é essa.

Vamos entender primeiro a história de cada tecnologia.

Windows Forms: nasceu junto com o .Net, em 2002. Era a maneira de fato de criar aplicações desktop para o Windows, e ainda é a mais usada. A idéia, ao que tudo indica, era dar uma interface que fosse familiar ao desenvolvedor de VB 6, mas adaptada para o .Net. Já nasceu com vários controles úteis, mas os controles só bateram os que o VB 6 tinha na versão 2.0, lançada em 2005.

WPF: nasceu em 2007, com o .Net 3.0 (ou seja, sobre o CLR 2.0). O Visual Studio 2008 ainda não havia sido lançado, e um pacote de atualização para o Visual Studio 2005 foi lançado, o que permitia desenvolver WPF nesta IDE. O pacote era, para dizer o mínimo, incompleto. No VS 2008 ela apareceu com a versão 3.5, na prática sua segunda versão. Nesta versão o suporte da IDE já é muito melhor, mas somente com o Expression Blend é possível ter uma IDE gráfica completa para edição. Em 2009 a adoção do WPF começa a se intensificar.

Quando usar WPF então? Vejam aqui os cenários em que entendo que vale a pena usar WPF:

  • Se você quer trabalhar com o framework que vai receber mais evoluções, WPF é o ideal. WPF é agora a maneira recomendada pela Microsoft para desenvolver aplicações desktop, e não Windows Forms. Não espere grandes evoluções no WF daqui por diante, apenas pequenas melhorias.
  • Se você gostaria de uma separação clara entre o trabalho de design e de engenharia, o modelo declarativo de construção da interface gráfica com XAML permite isso.
  • O suporte das ferramentas de design da família Expression é total, habilitando aplicações mais agradáveis e a criação de grandes efeitos, como transparências, animações, etc.
  • O MVVM, padrão filho do presentation model, é a maneira mais apresentada sobre como fazer uma aplicação WPF. O padrão prima pela separação entre visão e controle da aplicação, e oferece uma maneira desacoplada e testável de desenvolver. Espere aplicações mais bem desenvolvidas com WPF do que com Windows Forms. Ainda que isso não signifique que todas vão usar MVVM, ou ser bem desenvolvidas, isso sem dúvida é um ponto a favor, já que em WF não há um padrão recomendado ou sequer demonstrado em 99% das demos por aí.
  • WPF é praticamente um superset do Silverlight. O XAML é muito parecido. Se você avalia eventualmente migrar de uma aplicação desktop para Silverlight, via WPF será infinitamente mais fácil do que via WF.
  • WPF permite fazer aplicações mais bonitas. O exemplo clássico é um degrade de cores. Tente fazer um degrade no WF e verá que não é trivial, já no WPF é só configurar uma propriedade. Ou tente fazer um botão redondo no WF, e verá como é complexo. No WPF isso é simples, feito com poucas linhas de XML. Transparência é outro exemplo. E logo de início você percebe que o grid padrão do WPF é muito mais bonito que o grid padrão do WF.
  • Se é necessário integrar media no projeto, como vídeo, áudio, ou 3d, WPF é a melhor opção, já que isso já vem integrado.
  • Caso a aplicação tenha necessidade de utilizar temas ou skins, WPF oferece um extenso suporte à esse tipo de customizações. As opções são praticamente ilimitadas.
  • O suporte a databind do WPF é muito superior ao oferecido no WF.
  • Quer colocar um botão dentro de um grid, com um vídeo dentro do botão? Trivial, essa composição está na base do WPF.

E quando iniciar um projeto com Windows Forms?

  • O principal motivo é uma reunião de alguns fatores: time não conhece WPF, não há tempo para estudá-la, e não há interesse da empresa nesse investimento. Nesse cenário é melhor seguir com WF. Ainda assim, a grande pergunta é: porque a empresa não quer investir, será que ela já avaliou os benefícios do WPF? Geralmente não é o caso.
  • A performance do WF é um pouco melhor do que a do WPF. O WPF exige mais do hardware. Essa é uma questão complexa, que a Microsoft está tendo que enfrentar, agora que está desenvolvendo o Visual Studio com WPF. Espere grandes melhorias nesse sentido no .Net Framework 4. Mas se o produto for esperado antes do lançamento do WPF 4, e performance for um problema, WF é melhor.
  • O projeto é uma reconstrução de um projeto anterior, ou há uma suite de controles e/ou formulários já pronta que a empresa quer reaproveitar. Nesses cenários, pode ser que o ganho proporcionado pelo reaproveitamento de código já construído supere os ganhos do WPF.
  • A quantidade de controles de terceiros construídos para WF ainda é maior do que os focados em WPF, você tem mais opções. Mas esse jogo está virando, rapidamente.
  • Se você precisa de suporte total do designer do Visual Studio, e não vai comprar ou não tem acesso ao Expression Blend, WF é melhor. Esse suporte só vira no Visual Studio 2010, ou seja, de 3 a 6 meses de hoje.
  • A empresa precisa montar uma equipe rapidamente para um projeto e não tem um orçamento muito generoso. Há mais profissionais no mercado que trabalham com WF do que profissionais que conhecem WPF. E como raridade determina salário, quem conhece WPF tende a ganhar mais. (Mas da perspectiva do profissional, você quer ganhar menos ou mais?)

Há alguns mitos com relação ao uso de WPF que eu gostaria de discutir também:

  • Mito: Se a aplicação é simples e eu não vou ter um designer trabalhando no projeto, tanto faz usar WPF ou WF, e eu já conheço WF.
    Fato: WPF não é só sobre design gráfico. Toda a separação proporcionada entre visão com XAML e código, o suporte rico a databind, a evolução do framework, são motivos válidos para usar WPF até mesmo em aplicações simples, sem grandes apelos visuais.
  • Mito: WPF é difícil de aprender.
    Fato: WPF é difícil de aprender. Não tem o que dizer, a curva de aprendizado é grande para quem nasceu com Windows Forms ou VB6. Mas isso não é verdade se o seu background não é esse, ou seja, é uma questão de paradigma. Em qualquer dos casos, se prepare para bastante estudo.
  • Mito: desenvolvimento em WPF é mais lento que em WF.
    Fato: só é mais lento quando você não está familiarizado com WPF. Coloque um bom desenvolvedor WPF ao lado de um bom desenvolvedor WF, e peça o mesmo resultado, verá que não há diferença.
  • WPF ainda é uma tecnologia muito nova.
    Fato: WPF está na segunda versão, com a terceira sendo lançada em alguns meses. Não é mais uma tecnologia recente, e já há muita gente utilizando. A versão 1 realmente teve pouca adoção, mas isso não é mais motivo para não adotar hoje em dia. Ainda assim, acredito que a versão realmente madura, ou seja, a usada como referência, será a próxima, principalmente pelo suporte do Visual Studio e pelas melhorias de performance.

É sempre bom lembrar que integrar é possível, tanto WPF no WF, quando o contrário. Você pode iniciar a migração de WF para WPF aos poucos.

A idéia de discutir isso surgiu no twitter. Perguntei por lá porque você iniciaria um projeto em Windows Forms e não em WPF. Algumas das respostas, para vocês terem uma visão além da minha:

Ozory Em quanto tempo vou dominar o WPF como domino o Windows Forms? O cliente não vai esperar...
CaioProiete O mais comum: Porque o projeto tem data certa (e irrevogável) para entrar em produção e a equipe não tem experiência com WPF
Dennes Nem toda empresa tem experiência para lidar com essa relação complexa de design
Dennes Até mesmo na web a relação dos profissionais design x código é complicada, em windows então nem se fala.
vquaiato Por que temos preguiça de aprender uma tecnologia "nova"...
Denis_Petri Se não existe necessidade do sistema ter animações é muito mais rapido desenvolver em windows forms do que wpf.
hugoestevam Talvez a questão de desempenho, já testei GRIDs de empresas de comp. diferentes e sempre o WinForms é mais rápido que o WPF.
Denis_Petri Fazer um bind no grid do wpf é um saco, coisa que no winforms é moleza, mas concordo com @vquiato, a preguiça é tb um motivo
fgrehm conheco gente que simplesmente tem medo de mudar :-P
allistonCarlos winforms ao invés de WPF? Só se eu fosse masoquista!
Denis_Petri Cada caso é um caso, analise do que será usado é fundamental para o projeto... pq usar uma bazuca para matar uma formiga?
diogodamiani Porque, por mais que os desenv. queiram, tem empresas que não aceitam largar o passado e aderir às tecnologias do futuro.
rodrigokono 1-Performance (conhecer o ambiente do cliente) 2-Designer- (Terá alguém para fazer a parte cool?!) 3- Conhecimento de WPF.
andrecarlucci Webforms não faz sentido mais. Da mesma forma, se você fosse iniciar uma webapplication, deveria usar silverlight :)
facunte O principal motivo é tempo x capacitação da equipe. WPF não é tão simples qto parece. Mas estão avançando.
antoniodourado talvez para softwares que necessitem rodar em máquinas de menores potencias?! O WPF é relativamente mais pesado ou nd a ver?
edumenoncello somos dois, digo o mesmo p/ web forms, por mim, só MVC e Silverlight
Ozory Se tornar a vida do Dev + fácil, for robusto e rápido tá valendo.
fgrehm ah, e tem gente que tb tem medo do asp.net MVC :-P
fgrehm na verdade nao sei bem se eh medo, ta mais pra acomodação...
eliezerbp A configuração das máquinas onde a aplicação irá rodar (desempenho, acima de tudo). Eu também sou um péssimo designer!
pauloquicoli Sim, WPF na cabeça, mas, pra não usá-lo, só se for por motivo de hardware...
gumalheiros Se a aplicação for clean (Sem firula de Design), funcional como ERPs e sem restrição de máquina, já compensa WPF.

O que você acha? Continue a discussão nos comentários abaixo.


Postado na(s) categoria(s) .Net pelo Giovanni Bassi em 6 de janeiro de 2010 às 08:01 | Tags: ,

Comentários


janeiro 6. 2010 09:44
Israel Aece
Boas Giovanni,

"ou há uma suite de controles e/ou formulários já pronta que a empresa quer reaproveitar"

>> E olha que dá para utilizar o WindowsFormsHost para controles Windows Forms. Se forem controles relativamente simples, vale a pena reescrever em WPF, utilizando todos os benefícios que este framework fornece, do contrário, use-o para hospedar o controle legado. Apesar de alguns probleminhas chatos, ele acaba sempre ajudando.

http://www.israelaece.com/http://www.israelaece.com/


Brazil Leonardo Aguiar
janeiro 6. 2010 10:07
Leonardo Aguiar
Boas Giovanni,

Lendo esse post eu comecei a pensar em algumas coisas que eu tinha definido para mim profissionalmente.

Eu já havia decidido estudar fortemente o ASP.NET MVC esse ano, primeiro por que gosto de desenvolver para web, segundo por achar que o WebForms esta ficando ultrapassado e que o Windows Forms esta na UTI quase morrendo. Alias, não só o Windows Forms, mas qualquer desenvolvimento para Desktop, sinceramente acho que as aplicações tendem a migrar do Desktop para a nuvem e para dispositivos móveis, como smartphones, ipods e afins.

Eu não tenho nenhum conhecimento sobre WPF, já li uma coisa aqui e outra ali, mas nunca estudei ele, e lendo esse seu post comecei a me perguntar se o desenvolvimento para Desktop esta mesmo morrendo, ou se ele esta apenas se transformando. E começo a pensar se eu deveria estudar, além do ASP.NET MVC, o WPF, já que hoje eu trabalho com Windows Forms.

Qual a sua opnião sobre as aplicações para Desktop, estão morrendo, ou se transformando? Por que?

Você acha válido direcionar os meus estudos para ASP.NET MVC e WPF, ou é melhor estudar apenas um deles? Por que?

obrigado pelo ótimo post, e parabéns.

no site


janeiro 6. 2010 10:35
Giovanni Bassi
Oi Israel, pois é, mais um motivo pra migrar para o WPF.

http://unplugged.giggio.net/http://unplugged.giggio.net/


janeiro 6. 2010 10:50
Giovanni Bassi
Oi Leonardo,
Desenvolvimento para desktop com certeza não está morrendo. Tenho diversos clientes iniciando projetos desse tipo, e de fato é o que deve ser feito após uma análise séria de cenário. Desenvolver para a web traz complicações que às vezes não são necessárias.
Além disso, o SL e o WPF estão se aproximando. Eu não ficaria surpreso se em alguns anos virasse uma tecnologia só.
Quanto a estudar MVC ou WPF... difícil direcionar, as 2 são importantes, eu diria para você focar na que puder aplicar antes na sua vida profissional.

http://unplugged.giggio.net/http://unplugged.giggio.net/


Brazil Leonardo Aguiar
janeiro 6. 2010 11:17
Leonardo Aguiar
Obrigado Giovanni pela resposta.

Quanto aos estudos eu vou analisar com calma, gosto muito mais de desenvolver para web que para desktop, e estou muito empolgado com o ASP.NET MVC, mas trabalho com Windows Forms, e acho que você tem razão quando diz para eu focar no que eu puder aplicar antes na minha vida profissional.

Vou ler mais coisas sobre WPF e se for o caso, deixo para estudar ASP.NET MVC depois.

Obrigado.

no site


janeiro 6. 2010 15:31
Condé
Giggio,

Além dos fatores citados. Devemos lembrar que a demanda por interfaces ricas está aumentando, chega de interfaces a lá Clipper/MS-DOS/80.

E interfaces ricas é o campo de guerra do WPF.

Belo post !

abs
Condé

http://blogs.msdn.com/condehttp://blogs.msdn.com/conde


janeiro 6. 2010 20:24
Alliston
Legal, até eu tô no post hehe.
Mas agora, deixando de lado a brincadeira do masoquismo: EU, diga-se bem, EU não deixaria de desenvolver aplicações WPF pra utilizar WinForms. Tenho conhecimento nas duas tecnologias, e o WPF pra mim é mais produtivo.
Agora, claro que uma empresa, com seus tantos desenvolvedores WinForms será mais produtiva do que se utilizasse WPF apenas por modismo, ou "inovação".
Mas é bom pensar, que daqui a algum tempo, os recursos do WPF serão necessários enquanto os do WinForms serão ultrapassados

http://allistoncarlos.spaces.live.com/http://allistoncarlos.spaces.live.com/


janeiro 7. 2010 13:52
Rodrigo Kono
Muito muito bom o post Giggio.
Confesso que fiquei surpreso com alguns feedbacks do twitter. É fato que UI/UX são fatores que ainda será e deverá ser explorado, discutido e estudado mais e mais.

Por um bom tempo se falou muito de Eng. de Software, design patterns, metodologias etc. A razão disso tudo são softwares muito bem desenvolvidos, testados, documentados e bla bla bla (isso em constante evolução). O grande problema: aquele software bem desenvolvido é uma "mercadoria" (pra não falar outra coisa) para usar.

Que bom que isso está mudando! Desde da chegada do Windows Vista, .NET 3.0 (WPF principalmente) isso tem levantado uma série de fatores e possibilidades para o ambiente de interface, usabilidade e intuitividade do próprio software.

Outro ponto importante que isso trouxe junto da discussão de UX foi: "deixa desenhar a interface, quem realmente entende de design. Desenvolvedor não finaliza interface". Graças ao XAML. Oh! XAML...

Esse assunto é muito bom e você pontuou muito bem as questões de WPF e WForms. Eu completaria esse borbulho com WPF x WForms x Silverlight. Com a chegada do Silverlight OOB podemos colocar lenha nessa fogueira!! Yeah.. _o/

Para finalizar (virou quase um subpost), sobre o mito/fato em que vc citou "WPF não é só sobre design gráfico". Concordo e está certo. Porém é bom que o desenvolvedor saiba que boa parte dos efeitos só se consegue com a ajuda e trabalho de um designer, senão iremos voltar para os sistemas WForms com telas pipocadas de informações, controles e 0% de usabilidade... Inclusive o Databind no WPF também é feito pelo designer via XAML (que é um dos trunfos do XAML fazer bind sem suporte do manage code, somente usando markup. Isso poupa o developer e turbina o trabalho).

Escrevi demais!
É isso.

Congrats for this post...

http://www.rodrigokono.net/http://www.rodrigokono.net/


janeiro 7. 2010 18:27
Giovanni Bassi
Kono, é isso aí. WPF é design gráfico, e é uma bruta tecnologia poderosa em n outras frentes também.
E concordo que, se temos a possibilidade, temos que deixar o designer trabalhar. A aplicação fica outra.

http://unplugged.giggio.net/http://unplugged.giggio.net/


Brazil Márcio Rezende
janeiro 22. 2010 10:06
Márcio Rezende
Caro Giovanni,

Achei providencial você tocar nesse assunto. Há um tempo venho lendo algumas coisas sobre WPF, porém, vinha me mantendo

sempre um pouco "cético" sobre todas essas vantagens do WPF.

Isso mudou. Além do seu post esclarecer um bocado de dúvidas que eu tinha, tive a chance de assistir um vídeo do  Jason

Dolinger sobre WPF + MVVM (http://www.lab49.com/files/videos/Jason%20Dolinger%20MVVM.wmv).

Nesse vídeo ele apresenta o processo de criação de uma aplicação em WPF, começando da maneira que a maioria dos

desenvolvedores fazem no WinForms: armazenar referência a objetos do modelo e escrever código para preencher controles

com os dados do modelo diretamente no arquivo de code behind, nomear todos os controles, etc. O resultado é uma

aplicação impossível de testar e de difícil manutenção. A partir daí, seguindo as diretrizes do padrão Mvvm, ele

refatora a aplicação, mostrando o modo correto de se desenvolver em WPF. O resultado é espetacular.

Me surpreendi com o padrão Mvvm e com o suporte a DataBinding do WPF. Agora é estudar mais e começar a utilizar esses

recursos no dia-a-dia.

Abraços.

no site

Comentar


(Vai mostrar seu Gravatar)

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Quem é Giovanni Bassi

Giovanni Bassi Sou uma pessoa apaixonada por tecnologia e especificamente por .Net. Sou consultor independente especialista em .Net, focado em arquitetura e melhores práticas. Tenho dezenas de artigos publicados na .Net Magazine, revista da qual sou editor técnico. Ministro palestras e cursos de vez em quando, e quando dá tempo eu respiro um pouco. Mais detalhes nesta página.

Busca

Selos

Eu vou ao TechEd Brasil 2010, e você?

MVP

MCPD

MCSD

.Net Magazine

Abaixo ao if!

Calendário

«  setembro 2010  »
seteququsedo
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
Ver detalhamento de posts no calendário

Blogs interessantes

    OPMLDownload OPML file

    Postagens recentes

    Comentários recentes

    Disclaimer / Aviso
    As opiniões colocadas neste blog são minhas e pessoais e não expressam necessariamente as opiniões de meus empregadores, pareceiros e amigos. Da mesma forma, os comentários feitos por leitores do blog não expressam a minha opinião.

    © Copyright 2010 .Net Unplugged
    Log in