Por favor, explique o benefício (s) de usar uma sintaxe baseada em XML (por exemplo, XAML) em vez de código fonte normal (por exemplo, WinForms)? [fechadas]

8

Primeiro, observe que esta pergunta não é sobre WPF vs. WinForms.

Quais são os benefícios de mais alto nível que levaram a Microsoft a inventar o XAML em favor da abordagem "antiga" de gerar código C # compilável?

Minha impressão é que outros desenvolvedores parecem encontrar muitas desvantagens, mas a Microsoft foi embora independentemente, o que deve significar que há um benefício que não estou vendo. Gostaria que você me explicasse o que sinto falta.

Timwi
fonte
4
Não é esta uma duplicata ?: programmers.stackexchange.com/questions/139382/...
user16764
Não, porque esse foi encerrado pelos motivos descritos aqui , enquanto este foi escrito explicitamente para estar de acordo com as Perguntas frequentes e as diretrizes.
Timwi
@RobertHarvey Retiro, na verdade é diferente; Eu queria perguntar como a sintaxe baseada em XML é melhor do que uma linguagem para fins especiais, em vez de "código-fonte normal" como C #.
Roman Starkov
os benefícios para você ou para os implementadores de idioma / ferramenta?
jk.
2
@ Timwi eu não sei sobre isso. Conheço várias pessoas que parecem obrigadas a comprar produtos da Microsoft, independentemente de quanto isso os beneficiará.
Kris Harper #

Respostas:

7

O maior benefício do XAML é que ele permite descrever sua interface do usuário de maneira declarativa. Ou seja, você não diz tanto "crie uma caixa, redimensione-a agora", mas sim "crie uma caixa e btw, é desse tamanho"

O segundo lugar em que o XAML brilha é que ele realmente tira proveito das ligações. Por exemplo:

<Button IsEnabled="{Binding IsBusy}">

No seu modelo de visualização, você pode cuidar dos seus negócios e definir o IsBusy como true ou false e, conforme ele muda, o estado ativado do botão muda automaticamente para frente e para trás.

Então, como um exemplo mais complexo:

<ListBox ItemsSource={Binding Options}>
 <ListBox.ItemsTemplate>
  <CheckBox Checked="{Binding IsChecked}" Contents="{Binding Name}"/>
 </ListBox.ItemsTemplate>
</ListBox>

Neste exemplo, estamos vinculando a uma lista (Opções) e criando um item em uma caixa de listagem para cada item. O legal aqui é que, à medida que adicionamos itens à lista ou os removemos, a interface do usuário é sincronizada automaticamente com o estado da nossa lista. Quando clicamos na caixa de seleção de cada item, os objetos subjacentes são atualizados automaticamente para corresponder à interface do usuário. Com ferramentas poderosas como essa, cortei as UIs em uma fração do tempo que levaria para conectar todos os eventos em um aplicativo WinForms.

Em geral, tudo isso significa que você pode escrever sua interface do usuário em um formato declarativo e isso é um enorme ganho de produtividade. Embora, devo mencionar que isso tem um custo. Você provavelmente obterá mais desempenho de um aplicativo WinForms, pois o código será menos generalizado. Mas, a menos que você esteja fazendo algo como mostrar 40.000 linhas em uma grade de dados, provavelmente não notará uma grande desaceleração usando XAML.

Também deve ser mencionado que outras bibliotecas de interface do usuário atingem esse mesmo objetivo sem XML. Por exemplo, o QT usa Json (http://labs.qt.nokia.com/2009/05/13/qt-declarative-ui/)

Timothy Baldridge
fonte
4
Todos os benefícios mencionados são igualmente aplicáveis ​​a uma linguagem específica de domínio cuidadosamente projetada que não é derivada do XML.
Roman Starkov
1
E daí a última linha da minha resposta e o exemplo apontando para Qt.
Timothy Baldridge
De fato, há uma longa história de meta-idiomas da interface do usuário. Nota: o Motif UIL e também o trabalho pré-Java de David Flannigan em sua Xmt Library.
Sdg
6

Os 8 benefícios do XAML para UI e além

  • XAML descreve dados de maneira concisa, mas humana e compreensível à máquina
  • XAML é útil para muitos tipos de dados
  • XAML usa modelos de objetos digitados para melhor programação e validação
  • XAML é extensível e tolerante a versões
  • XAML é passível de ferramentas
  • XAML é XML (ele se beneficia da disponibilidade de ferramentas disponíveis no mercado, legíveis por humanos etc.)
  • XAML permite modelos de programação orientada a eventos
  • XAML pode ser compilado ou interpretado

Eu vejo o XAML como uma "linguagem intermediária" da interface do usuário; você pode usá-lo com qualquer linguagem de programação e em diferentes plataformas. Permite a descrição independente da linguagem, plataforma e dispositivo da interface do usuário.

Robert Harvey
fonte
1
Na sua opinião, esses 8 benefícios são válidos e / ou precisos?
Steven Evers
5
Benefício # 9 - XAML Melhora seu currículo
jfrankcarr
3
@SnOrfus: Mais ou menos. Conciso é discutível, por exemplo. : P
Robert Harvey
1
"XAML é XML" também é discutível. O XML impõe limitações incomuns aos comentários, por exemplo, que são uma ferramenta útil para remover temporariamente algum código.
Roman Starkov
3
Muitos deles se enquadram em "XAML é XML". Eu responderia à @SnOrfus "sim, da forma de apresentação em powerpoint de um vendedor".
Psr
3

O uso de XML fornece metadados em um formato compatível com um grande número de analisadores e ferramentas de análise. Pelo menos em teoria, isso permite que alguém se meta-programe usando qualquer linguagem.

Mais praticamente, o XML permite que você pareça um padrão mais aberto. Você pode argumentar que é apenas uma marcação como um navegador, mas mais fácil de analisar.

Esses são benefícios reais, mas, na prática, há muita coisa acontecendo fora da XAML para que os benefícios sejam terrivelmente importantes.

psr
fonte
1
Por que esse argumento se aplica ao XAML, mas não a uma linguagem de programação? "<While Condition="a == true"><Print>Hi!</Print></While>"alguém? Isso é obviamente atroz; por que você acha que a representação da interface do usuário é diferente?
Roman Starkov
@romkyns - eu não estava discutindo pelo XAML, a pergunta foi se havia algum benefício (minha interpretação). Por que eu acho que a interface do usuário é diferente - provavelmente o layout da interface do usuário é mais simples de representar do que o código arbitrário, portanto o XML é menos atroz do que seria para, digamos, o XC # (a sintaxe XML do C # que devemos rezar nunca existe). Na verdade, sou bastante duvidoso sobre os benefícios reais do XAML sobre o código .NET com API razoável para meta codificação ou uma linguagem personalizada com sintaxe publicada. (Nem de que permite MS colocar um adesivo "-driven XML" na caixa.)
psr
1

O XAML foi projetado para simplesmente representar uma hierarquia de objetos e não apenas para a GUI, como XPS e WF. O uso do XAML para criar aplicativos ajudaria você a fornecer RIA (Rich Internet Applications), bem como aplicativos de desktop ricos.

O uso do XAML como uma representação declarativa da GUI baseada em texto aproxima as ferramentas de desenvolvimento do MS de outras tecnologias consideradas padrão no setor, como HTML.

Alguns dos principais recursos do XAML (no Windows Forms) são:

  1. O XAML permite desenhar imagens e transformações de Scalable Vector Graphics (SVG). Um dos benefícios dos gráficos vetoriais é que eles podem ser dimensionados para qualquer tamanho sem perder a qualidade, para que você não se preocupe muito com a resolução do computador do usuário.

  2. Os formulários do Windows, em geral, sofriam de suporte limitado ao posicionamento automático dos controles como resultado do redimensionamento e das alterações na superfície da GUI (como quando novos controles são adicionados ou removidos). Os controles são posicionados por especificação explícita dos valores de linha e coluna para cada controle por meio da GUI ou código do programa. Embora o XAML permita esse comportamento, ele apresenta uma maneira mais fácil de resolver esse problema, fornecendo o controle Stack Control e os controles Wrap Panel.

  3. No XAML, você pode criar novos controles a partir dos existentes diretamente no XAML usando o aninhamento. Você pode aninhar um controle de imagem dentro do controle de botão junto com um Painel de Pilha para criar um novo tipo de botão, ou seja, um botão com uma imagem. Como esse controle é criado no XAML, você não precisa criar uma dll separada para usá-lo como no caso dos formulários do Windows. Exemplo:

    <Button Width="90" Height="40">
        <StackPanel Orientation="Horizontal">
          <Image Source="Yes.png" Width="14" Height="14" />
          <TextBlock Margin="5,1,0,0" Text="Yes" />
        </StackPanel>
    

  4. O estilo e os modelos permitem personalizar a aparência dos controles em vários níveis semelhantes aos recursos de CSS e HTML. Não é necessária programação processual. Uma mudança pode ser refletida em toda a GUI.

  5. O XAML permite técnicas avançadas de ligação de dados não disponíveis nos formulários do Windows. Você pode até vincular um controle aos valores de dados da antera.

  6. O XAML fornece uma estrutura de Navegação integrada que você pode usar ou substituir por outras estruturas. De fato, o WPF, o Silverlight e o XAML foram projetados para aproveitar o padrão MVVM que você não pode alcançar exatamente com o Windows Forms.

  7. Com a introdução do XAML, o código por trás dos arquivos pode ser isolado em um grau maior dos arquivos de design da interface. Obviamente, a dependência de alguns nomes ainda existe. No entanto, o fato de o XAML ser uma linguagem declarativa baseada em texto semelhante ao XML e HTML que não requer um compilador, permite que os designers de interface criem arquivos XAML separados para serem posteriormente integrados ao código por trás dos arquivos. Isso é diferente do caso dos formulários do Windows em que a GUI é fortemente acoplada como código de procedimento no projeto. Designers que usam XAML podem até sair do Visual Studio e usar a ferramenta MS Expression Blend para criar sua GUI. O MS Expression Blend foi criado para designers, e não para programadores.

  8. O XAML fornece técnicas nativas avançadas para exibição de animação e vídeo sem a necessidade de ferramentas de terceiros.

  9. O objetivo do XAML era tornar o desenvolvimento do software e das páginas da Web baseados no Windows mais próximos do que o ASP.NET e o Windows Forms. O Silverlight e o WPF usam XAML (embora existam algumas diferenças, mas grande parte da experiência é transferível).

  10. Um SDK para XAML inclui controles interessantes e permite, entre outros recursos, oferecer suporte à apresentação no estilo de assistentes / storyboard sem usar uma ferramenta de terceiros.

NoChance
fonte
Obviamente, você se esforçou bastante nisso, mas entendeu mal um ponto importante: está discutindo as vantagens do WPF , não do XAML . XAML é apenas uma representação única das UIs do WPF, que é baseada em XML.
Roman Starkov
@romkyns, obrigado pelo seu comentário. O título da pergunta é: "explique os benefícios do uso de uma sintaxe baseada em XML (por exemplo, XAML) em vez do código fonte normal (por exemplo, WinForms)?" - Nenhuma menção ao WPF, mesmo no corpo.
NoChance
Isso mesmo, e sua resposta ainda discute o WPF (mas chama XAML incorretamente). Você entende o que eu quero dizer agora? XAML não fornece uma estrutura de navegação interna; WPF faz. O estilo é um recurso do WPF, não do XAML. Etc.
Roman Starkov
@romkyns, obrigado pelo esclarecimento, entendo o seu ponto. Sua sugestão que o próprio XAML faz é totalmente independente desses recursos é nova para mim e eu meio que duvido. Eu posso ter uma chance de pesquisar mais. Eu aprecio apontar isso.
NoChance
1

XAML descreve dados de maneira concisa, mas humana e compreensível à máquina

Em teoria, todo novo idioma é algo que você precisa aprender. Muitas pessoas preferem falar muitos / vários idiomas - como isso é considerado uma riqueza de idiomas. Isso existe e está relacionado a linguagens naturais, mas não é necessário a linguagens de programação.

Eu, sozinho, tenho programação em várias linguagens, incluindo arquivos em lote, perl, lua, python, c ++ e c #. Eu me lembro de todos eles? Não, posso mudar usando outro idioma, mas isso leva tempo. Apenas escrevendo agora em C #, depois mude para C ++, você pode facilmente misturar: NULL, null, nil ou nullptr, dependendo da linguagem de programação e do "dialeto". (c ++ normal, c ++ gerenciado)

xaml é "dialeto" em xml. É fácil aprender? com base em muitas perguntas em outros fóruns, eu diria que não.

Ele substitui o C #? Não.

A resposta é bastante óbvia - eu preferiria ter uma linguagem de programação bem projetada (C # - por exemplo, reflexão de tipo de dados), com um bom desempenho (como C ++) e com script (script de C #, C ++ / se apega ou até melhor)

Atualmente, C ++ e C # não atendem totalmente às minhas necessidades, mas xaml é um formato de dados ímpar, que eu não consideraria digno de aprendizado (apenas envolvendo e ocultando os olhos do desenvolvedor)

No final, eu gostaria de recombinar a linguagem natural (falada) com a linguagem de programação (linguagem artificialmente construída) na mesma linguagem - para que possa ser usada para comunicação e pelos programadores - isso será mais tarde no futuro, quando a "arquitetura" da linguagem de programação ou "padrões de design" começarão a ser documentados.

  1. O XAML permite desenhar imagens e transformações de Scalable Vector Graphics (SVG).
  2. ...

O XAML realmente introduz alguns novos recursos aprimorados sobre as formas de win, por isso vale a pena usá-lo. Mas, eventualmente, se você quiser que a interface do usuário se torne totalmente dinâmica - o xaml precisa ser substituído por um código de tempo de execução semelhante.

Eventualmente, a interface do usuário deve ser simples de usar - e isso significa um conjunto mínimo de controles, controles parecidos (cancelar, ok, atalhos, mesma largura / altura e assim por diante), o que significa que a interface do usuário pode ser mais ou menos gerada automaticamente.

Btw - é possível incorporar no código xaml C # diretamente? Meta dados, string, comentários?

Às vezes, é legal abusar ou abusar da linguagem de maneira que ninguém imaginou que ela fosse usada. O Perl faz muito isso, mas eu prefiro uma sintaxe mais limpa do que uma enigmática. Mas C # versus xaml - eu escolheria C #.

TarmoPikaro
fonte
0

Um benefício é que o XAML pode ser usado em outros aplicativos. Um bom exemplo é que o XAML pode ser desenvolvido no Blend por um designer / artista, enquanto os internos (code behind) são codificados no visual studio.

Acredito que foi a tentativa da Microsoft de marcar a interface do usuário separadamente versus o código por trás e tornar possível que a interface do usuário fosse codificada por não programadores usando uma ferramenta como o Blend.

Mas muitas lojas não têm o Blend, então para muitos de nós parece uma reinvenção da roda.

Aqui estão 8 pontos comprados por alguém mais próximo do cliente Windows:

8 benefícios XAML

Jon Raynor
fonte
1
O autor do seu link compara o XAML com uma linguagem de programação de uso geral bastante detalhada. Talvez o XAML seja mais compacto que o C # ou o Java. Esse é um ponto contra C # e Java, não é realmente um ponto a favor do XAML. O código Ruby equivalente seria igualmente compacto, com todo o poder do Ruby disponível, se necessário.
kevin Cline
Esse é um benefício da ferramenta Blend, não do XAML? O Blend poderia ter existido como uma GUI orientada a designers que criou código nos bastidores?
21412 MarkJ em
1
Realmente parece uma reinvenção da roda para aqueles que usam Delphi. Ele possui um DSL simples e independente de código para o layout do formulário desde o início (1995), e sem toda a bagagem feia e volumosa que o XML carrega com ele.
Mason Wheeler
@MarkJ - O Blend é voltado especificamente para designers, antes disso era apenas arrastar / soltar no Visual Studio. Antes do WPF, os formulários do Windows limitavam a funcionalidade incorporada para animação e bling da GUI. O Blend poderia ter existido antes, mas o designer precisaria familiarizar-se com os arquivos de código C # ou .net (.cs). XAML você pode marcação que é algo que um designer já está familiarizado com (HTML, XML, etc.)
Jon Raynor
Estou sugerindo que o Blend poderia ter sido uma GUI orientada ao designer que criou arquivos de código C #. O designer não precisa estar familiarizado com a estrutura de um arquivo de código C #, assim como não precisa entender a estrutura binária interna de um JPG ou PNG para criar imagens no Photoshop.
MarkJ
-1

Um ponto que não vejo em muitas respostas é que o xaml envolve o núcleo dos principais wpf desgin. Separe a representação visual e a lógica visual (na prática, isso é limitado a gatilhos e similares, mas assumindo que não há controles personalizados, isso geralmente é tudo o que você precisa) da lógica de negócios. Isso também se encaixa bem como outros observaram com uma sintaxe expressiva para ligação, propriedades anexadas e outros metadados que podem ser mais detalhados no código C # normal.

Em uma nota de opinião mais pessoal, uma coisa que acho interessante no xaml é que o beter representa a hierarquia visual dos controles do que apenas gerar código. À primeira vista, é fácil ver como um controle está relacionado aos outros.

patas
fonte