¿Explica los beneficios de usar una sintaxis basada en XML (por ejemplo, XAML) en lugar del código fuente normal (por ejemplo, WinForms)? [cerrado]

8

En primer lugar, tenga en cuenta que esta pregunta no se trata de WPF vs. WinForms.

¿Cuáles son los beneficios de mayor rango que llevaron a Microsoft a inventar XAML a favor del enfoque "antiguo" de generar código C # compilable?

Mi impresión es que otros desarrolladores parecen encontrar muchas desventajas, pero Microsoft lo hizo independientemente, lo que debe significar que hay un beneficio que no estoy viendo. Me gustaría que me explicaras qué es lo que me falta.

Timwi
fuente
44
¿No es un duplicado ?: programmers.stackexchange.com/questions/139382/…
user16764
No, porque ese se cerró por los motivos descritos aquí , mientras que este está escrito explícitamente para estar en línea con las preguntas frecuentes y las pautas.
Timwi
@RobertHarvey Lo retiro, en realidad es diferente; Quería preguntar cómo la sintaxis basada en XML es mejor que un lenguaje de propósito especial, en lugar de "código fuente normal" como C #.
Roman Starkov
¿Cuáles son los beneficios para usted o para los implementadores del lenguaje / herramienta?
jk.
2
@Timwi No sé sobre eso. Conozco a varias personas que parecen obligadas a comprar productos de Microsoft, independientemente de cuánto los beneficie.
Kris Harper

Respuestas:

7

El mayor beneficio de XAML es que le permite describir su IU de manera declarativa. Es decir, no dices tanto "crea una caja, ahora redimensiona", dices "crea una caja y por cierto, es de este tamaño"

El segundo lugar donde brilla XAML es que realmente aprovecha las vinculaciones. Por ejemplo:

<Button IsEnabled="{Binding IsBusy}">

En su modelo de vista, puede ocuparse de su negocio y establecer IsBusy en verdadero o falso, y a medida que cambia, el estado habilitado del Botón cambia automáticamente de un lado a otro.

Entonces, como un ejemplo más complejo:

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

En este ejemplo, estamos vinculando una lista (Opciones) y creando un elemento en un cuadro de lista para cada elemento. Lo bueno aquí es que a medida que agregamos elementos a la lista o los eliminamos, la IU se sincroniza automáticamente con el estado de nuestra lista. Cuando hacemos clic en la casilla de verificación de cada elemento, los objetos subyacentes se actualizan automáticamente para que coincidan con la interfaz de usuario. Con herramientas poderosas como esta, he pirateado las IU en una fracción del tiempo que me llevaría conectar todos los eventos en una aplicación WinForms.

En general, todo esto significa que puede escribir su interfaz de usuario en un formato declarativo y esto es una ganancia masiva de productividad. Aunque, debo mencionar que esto tiene un costo. Probablemente obtendrá más rendimiento de una aplicación WinForms ya que el código será menos generalizado. Pero a menos que esté haciendo algo como mostrar 40,000 filas en una cuadrícula de datos, probablemente no notará una gran desaceleración con XAML.

También se debe mencionar que otras bibliotecas de UI logran este mismo objetivo sin XML. Por ejemplo, QT usa Json (http://labs.qt.nokia.com/2009/05/13/qt-declarative-ui/)

Timothy Baldridge
fuente
44
Todos los beneficios que menciona son igualmente aplicables a un lenguaje específico de dominio cuidadosamente diseñado que no se deriva de XML.
Roman Starkov
1
Y de ahí la última línea de mi respuesta y el ejemplo que apunta a Qt.
Timothy Baldridge
De hecho, hay una larga historia de metalenguajes de interfaz de usuario. nb el Motif UIL y también el trabajo previo a Java de David Flannigan en su Biblioteca Xmt.
sdg
6

Los 8 beneficios de XAML para UI y más allá

  • XAML describe los datos de forma concisa, pero comprensible para humanos y máquinas
  • XAML es útil para muchos tipos de datos
  • XAML utiliza modelos de objetos con tipo para una mejor programación y validación
  • XAML es extensible y tolerante a la versión
  • XAML es toolable
  • XAML es XML (se beneficia de la disponibilidad de herramientas estándar, es legible para humanos, etc.)
  • XAML permite modelos de programación guiados por eventos
  • XAML se puede compilar o interpretar

Veo XAML como un "lenguaje intermedio" de la interfaz de usuario; puedes usarlo con cualquier lenguaje de programación y en diferentes plataformas. Permite la descripción independiente de idioma, plataforma y dispositivo de la interfaz de usuario.

Robert Harvey
fuente
1
En su opinión, ¿son esos 8 beneficios válidos y / o precisos?
Steven Evers
55
Beneficio # 9 - XAML mejora su currículum
jfrankcarr
3
@SnOrfus: más o menos. Conciso es discutible, por ejemplo. : P
Robert Harvey
1
"XAML es XML" también es discutible. XML establece limitaciones inusualmente estrictas en los comentarios, por ejemplo, que son una herramienta útil para eliminar temporalmente algún código.
Roman Starkov
3
Muchos de estos se encuentran en "XAML es XML". Yo respondería a @SnOrfus "sí, en una presentación de powerpoint de vendedor".
psr
3

El uso de XML le proporciona metadatos en un formato que admite una gran cantidad de analizadores y herramientas de análisis. Al menos en teoría, esto le permite a cualquiera realizar un metaprograma en su contra utilizando cualquier lenguaje.

Más prácticamente, XML te permite parecer un estándar más abierto. Puede argumentar que es solo marcado como un navegador, pero más fácil de analizar.

Estos son beneficios reales, pero en la práctica están sucediendo muchas cosas fuera de XAML para que los beneficios sean terriblemente importantes.

psr
fuente
1
¿Por qué este argumento se aplica a XAML, pero no a un lenguaje de programación? "<While Condition="a == true"><Print>Hi!</Print></While>"¿nadie? Eso es obviamente atroz; ¿Por qué crees que la representación de la interfaz de usuario es diferente?
Roman Starkov
@romkyns: no estaba discutiendo por XAML, la pregunta era si había algún beneficio (mi interpretación). En cuanto a por qué creo que la interfaz de usuario es diferente, probablemente el diseño de la interfaz de usuario sea más simple de representar que el código arbitrario, por lo que el XML es menos atroz de lo que sería para, por ejemplo, XC # (la sintaxis XML para C # que debemos rezar nunca existe). De hecho, tengo dudas acerca de los beneficios del mundo real de XAML sobre código .NET con API razonable para metacodificación o un lenguaje personalizado con sintaxis publicada. (Ninguno de los cuales permite a MS poner una pegatina "basada en XML" en la caja.)
psr
1

XAML fue diseñado para representar simplemente una jerarquía de objetos y no solo para GUI como XPS y WF. El uso de XAML para crear aplicaciones lo ayudaría a entregar aplicaciones de Internet enriquecidas (RIA), así como aplicaciones de escritorio enriquecidas.

El uso de XAML como una representación declarativa de GUI basada en texto acerca las herramientas de desarrollo de MS un paso más cerca de otras tecnologías consideradas estándar en la industria, como HTML.

Algunas de las características principales de XAML (sobre Windows Forms) son:

  1. XAML permite dibujar imágenes y transformaciones de gráficos vectoriales escalables (SVG). Uno de los beneficios de los gráficos vectoriales es que pueden escalar a cualquier tamaño sin perder calidad, por lo que no debe preocuparse demasiado por la resolución de la computadora del usuario.

  2. Los formularios de Windows, en general, sufrieron un soporte limitado para la colocación automática de controles como resultado del cambio de tamaño de las ventanas y los cambios en la superficie de la GUI (como cuando se agregan o eliminan nuevos controles). Los controles se posicionan mediante la especificación explícita de los valores de fila y columna para cada control a través de la GUI o el código del programa. Si bien XAML permite este comportamiento, presenta una forma más fácil de resolver este problema al proporcionar el control de control de pila y los controles del panel de ajuste.

  3. En XAML puede construir nuevos controles a partir de los existentes directamente en XAML mediante anidamiento. Puede anidar un control de imagen dentro del control de botón junto con un Panel de pila para crear un nuevo tipo de botón, es decir, un botón con una imagen. Dado que este control se crea en XAML, no necesita crear un dll separado para usarlo como en el caso de los formularios de Windows. Ejemplo:

    <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. El estilo y las plantillas le permiten personalizar el aspecto de los controles en varios niveles, de forma similar a las capacidades de CSS y HTML. No se requiere programación de procedimientos. Un cambio puede reflejarse en toda la GUI.

  5. XAML permite técnicas avanzadas de enlace de datos que no están disponibles en los formularios de Windows. Incluso puede vincular un control a los valores de datos de antera.

  6. XAML proporciona un marco de navegación incorporado que puede usar o reemplazar con otros marcos. De hecho, WPF, Silverlight y XAML están diseñados para aprovechar el patrón MVVM que no se puede lograr con Windows Forms.

  7. Con la introducción de XAML, el código detrás de los archivos podría aislarse en mayor grado de los archivos de diseño de la interfaz. Por supuesto, todavía existe la dependencia de algunos nombres. Sin embargo, el hecho de que XAML sea un lenguaje declarativo basado en texto similar a XML y HTML que no requiere un compilador, permite a los diseñadores de interfaces crear archivos XAML separados para luego integrarlos con el código detrás de los archivos. Esto es diferente al caso de los formularios de Windows donde la GUI está estrechamente acoplada como código de procedimiento en el proyecto. Los diseñadores que usan XAML podrían incluso abandonar Visual Studio y usar la herramienta MS Expression Blend para crear su GUI. MS Expression Blend está creado para diseñadores en lugar de programadores.

  8. XAML proporciona técnicas nativas avanzadas para animación y visualización de video sin la necesidad de herramientas de terceros.

  9. XAML tenía la intención de hacer que el desarrollo de software basado en Windows y páginas web fuera más cercano de lo que estaba usando ASP.NET y Windows Forms. Silverlight y WPF usan XAML (aunque existen algunas diferencias, pero gran parte de la experiencia es transferible).

  10. Un SDK para XAML incluye controles interesantes y le permite, entre otras funciones, admitir la presentación de asistentes / guiones gráficos sin usar una herramienta de terceros.

Ninguna posibilidad
fuente
Obviamente, ha puesto mucho esfuerzo en esto, pero ha entendido mal un punto importante: está discutiendo las ventajas de WPF , no de XAML . XAML no es más que una representación única de las interfaces de usuario de WPF, una que está basada en XML.
Roman Starkov
@romkyns, gracias por tu comentario. El título de la pregunta es: "¿explicar los beneficios de usar una sintaxis basada en XML (por ejemplo, XAML) en lugar del código fuente normal (por ejemplo, WinForms)?" - No se menciona a WPF ni siquiera en el cuerpo.
NoPuerto
Así es, y sin embargo, su respuesta aún discute WPF (pero lo llama XAML, incorrectamente). ¿Ves lo que quiero decir ahora? XAML no proporciona un marco de navegación incorporado; WPF lo hace. El estilo es una característica de WPF, no de XAML. Etc.
Roman Starkov
@romkyns, gracias por la aclaración, veo tu punto. Su sugerencia de que XAML es totalmente independiente de estas características es nueva para mí y lo dudo. Puedo tener la oportunidad de investigarlo más. Agradezco señalar esto.
NoPuerto
1

XAML describe los datos de forma concisa, pero comprensible para humanos y máquinas

En teoría, cada idioma nuevo es algo que necesitas aprender. Muchas personas preferirían hablar muchos / múltiples idiomas, ya que se considera riqueza lingüística. Esto existe y está relacionado con los lenguajes naturales, pero no es necesario para los lenguajes de programación.

Yo solo tengo programación en muchos idiomas, incluidos archivos por lotes, perl, lua, python, c ++ y c #. ¿Me acuerdo de todos ellos? No, puedo cambiar usando otro idioma, pero lleva tiempo. Simplemente escribiendo ahora en C #, luego cambie a C ++, puede mezclar fácilmente si es NULL, null, nil o nullptr dependiendo del lenguaje de programación y es "dialecto". (c ++ normal, c ++ administrado)

xaml es xml "dialecto". Es fácil de aprender ? basado en muchas preguntas en otros foros, diría que no.

¿Reemplaza C #? No.

La respuesta es bastante obvia: preferiría tener un lenguaje de programación, que esté bien diseñado (C #, por ejemplo, reflexión de tipo de datos), tenga un buen rendimiento (como C ++) y se pueda programar (C # -script, C ++ / cling o incluso mejor)

Actualmente, C ++ y C # no satisfacen completamente mis necesidades, pero xaml es un formato de datos extraño, que no consideraría que valga la pena aprender (solo envolverlo y ocultarlo a los ojos del desarrollador)

Al final, me gustaría recombinar el lenguaje natural (hablado) con el lenguaje de programación (lenguaje artificialmente construido) en el mismo idioma, para que pueda ser utilizado para la comunicación y por los programadores, esto es más adelante en el futuro, cuando la "arquitectura" del lenguaje de programación o "patrones de diseño" comenzarán a documentarse.

  1. XAML permite dibujar imágenes y transformaciones de gráficos vectoriales escalables (SVG).
  2. ...

De hecho, XAML presenta algunas características nuevas y mejoradas sobre las formas win, por lo que vale la pena considerar usarlo. Pero eventualmente, si desea que su interfaz de usuario se vuelva completamente dinámica, xaml debe ser reemplazado por un código de tiempo de ejecución similar.

Eventualmente, la interfaz de usuario debería ser fácil de usar, y eso significa un conjunto mínimo de controles, los controles se ven similares (cancelar, aceptar, accesos directos, mismo ancho / alto, etc.), lo que significa que la IU puede generarse más o menos automáticamente.

Por cierto, ¿es posible incrustar directamente en el código xaml C #? Metadatos, cadena, comentarios?

A veces es bueno usar mal o abusar del lenguaje de una manera que nadie imaginó que se usaría. Perl hace esto mucho, pero prefiero una sintaxis más limpia que críptica. Pero C # versus xaml: elegiría C #.

TarmoPikaro
fuente
0

Una ventaja es que el XAML puede usarse en otras aplicaciones. Un buen ejemplo es que un diseñador / artista puede desarrollar el XAML en Blend mientras que las partes internas (código subyacente) se codifican en Visual Studio.

Creo que fue el intento de Microsoft de separar el marcado de la interfaz de usuario versus el código subyacente y hacer posible que los usuarios que no son programadores codifiquen la interfaz de usuario utilizando una herramienta como Blend.

Pero, muchas tiendas no tienen Blend, por lo que para muchos de nosotros parece una reinvención de la rueda.

Aquí hay 8 puntos comprados por alguien más cercano al cliente de Windows:

8 Beneficios XAML

Jon Raynor
fuente
1
El autor de su enlace compara XAML con un lenguaje de programación bastante detallado y de propósito general. Quizás XAML es más compacto que C # o Java. Ese es un punto contra C # y Java, no realmente un punto a favor de XAML. El código Ruby equivalente sería igual de compacto, con toda la potencia de Ruby disponible si fuera necesario.
Kevin Cline
¿Es un beneficio de la herramienta Blend, no XAML? ¿Blend podría haber existido como una GUI orientada al diseñador que creó código detrás de escena?
MarkJ
1
Realmente parece una reinvención de la rueda para aquellos de nosotros que usamos Delphi. Tiene un DSL simple e independiente del código para el diseño de formularios desde el principio (1995), y sin todo el equipaje feo y voluminoso que XML lleva consigo.
Mason Wheeler
@MarkJ - Blend está específicamente dirigido a diseñadores, antes de eso solo era arrastrar / soltar en Visual Studio. Antes de WPF, los formularios de Windows tenían una funcionalidad incorporada limitada para la animación y la interfaz gráfica de usuario. La mezcla podría haber existido antes, pero el diseñador necesitaría estar familiarizado con los archivos de código C # o .net (.cs). XAML puede marcar, que es algo con lo que un diseñador ya está familiarizado (HTML, XML, etc.)
Jon Raynor
Estoy sugiriendo que Blend podría haber sido una GUI orientada al diseñador que creó archivos de código C #. El diseñador no necesita haber estado familiarizado con la estructura de un archivo de código C #, al igual que no tiene que entender la estructura binaria interna de un JPG o PNG para crear imágenes en Photoshop.
MarkJ
-1

Un punto que no veo en muchas respuestas es que xaml encierra el núcleo de los principios de diseño de wpf. Separe la representación visual y la lógica visual (en la práctica, esto se limita a los desencadenantes y demás, pero suponiendo que no haya controles personalizados, esto es a menudo todo lo que necesita) de la lógica empresarial. Esto también se combina bien como otros han notado con una sintaxis expresiva para propiedades vinculantes, vinculadas y otros metadatos que pueden ser más detallados en el código C # normal.

En una nota de opinión más personal, una cosa que me agrada de xaml es que beter representa la jerarquía visual de los controles que solo genera código. De un vistazo, es fácil ver cómo un control está relacionado con los otros.

patas
fuente