Bitte erläutern Sie die Vorteile einer XML-basierten Syntax (z. B. XAML) anstelle von normalem Quellcode (z. B. WinForms). [geschlossen]

8

Bitte beachten Sie zunächst, dass es bei dieser Frage nicht um WPF vs. WinForms geht.

Was sind die höchsten Vorteile, die Microsoft dazu veranlasst haben, XAML zugunsten des „alten“ Ansatzes zur Generierung von kompilierbarem C # -Code zu erfinden?

Mein Eindruck ist, dass andere Entwickler viele Nachteile zu finden scheinen, aber Microsoft hat sich trotzdem dafür entschieden, was bedeuten muss, dass es einen Vorteil gibt, den ich nicht sehe. Ich möchte, dass Sie mir erklären, was ich vermisse.

Timwi
quelle
4
Ist das nicht ein Duplikat?: Programmers.stackexchange.com/questions/139382/…
user16764
Nein, da dieser aus den hier genannten Gründen geschlossen wurde , während dieser ausdrücklich so geschrieben wurde, dass er den häufig gestellten Fragen und Richtlinien entspricht.
Timwi
@ RobertHarvey Ich nehme es zurück, es ist tatsächlich anders; Ich wollte fragen, wie XML-basierte Syntax besser ist als eine Spezialsprache und nicht "normaler Quellcode" wie C #.
Roman Starkov
die Vorteile für Sie oder für die Sprach- / Tool-Implementierer?
jk.
2
@ Timwi Das weiß ich nicht. Ich kenne mehrere Leute, die gezwungen zu sein scheinen, Microsoft-Produkte zu kaufen, unabhängig davon, inwieweit sie davon profitieren.
Kris Harper

Antworten:

7

Der größte Vorteil von XAML besteht darin, dass Sie Ihre Benutzeroberfläche deklarativ beschreiben können. Das heißt, Sie sagen nicht so sehr "Erstellen Sie eine Box, ändern Sie jetzt die Größe", sondern "Erstellen Sie eine Box und übrigens, sie hat diese Größe".

Der zweite Punkt, an dem XAML glänzt, ist, dass es Bindungen wirklich ausnutzt. Zum Beispiel:

<Button IsEnabled="{Binding IsBusy}">

In Ihrem Ansichtsmodell können Sie Ihrem Unternehmen nachgehen und IsBusy auf wahr oder falsch setzen. Wenn es sich ändert, wechselt der aktivierte Status der Schaltfläche automatisch hin und her.

Als komplexeres Beispiel:

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

In diesem Beispiel binden wir an eine Liste (Optionen) und erstellen für jedes Element ein Element in einem Listenfeld. Das Coole dabei ist, dass beim Hinzufügen oder Entfernen von Elementen zur Liste die Benutzeroberfläche automatisch mit dem Status unserer Liste synchronisiert wird. Wenn wir das Kontrollkästchen für jedes Element aktivieren, werden die zugrunde liegenden Objekte automatisch aktualisiert, um mit der Benutzeroberfläche übereinzustimmen. Mit leistungsstarken Tools wie diesen habe ich Benutzeroberflächen in einem Bruchteil der Zeit gehackt, die ich für die Verkabelung aller Ereignisse in einer WinForms-App benötigt hätte.

Im Allgemeinen bedeutet dies alles, dass Sie Ihre Benutzeroberfläche in einem deklarativen Format schreiben können. Dies ist ein massiver Produktivitätsgewinn. Allerdings muss ich erwähnen, dass dies kostenpflichtig ist. Sie werden wahrscheinlich mehr Leistung aus einer WinForms-App herausholen, da der Code weniger verallgemeinert wird. Aber wenn Sie nicht etwa 40.000 Zeilen in einem Datenraster anzeigen, werden Sie mit XAML wahrscheinlich keine große Verlangsamung bemerken.

Es sollte auch erwähnt werden, dass andere UI-Bibliotheken dasselbe Ziel ohne XML erreichen. QT verwendet beispielsweise Json (http://labs.qt.nokia.com/2009/05/13/qt-declarative-ui/).

Timothy Baldridge
quelle
4
Alle von Ihnen genannten Vorteile gelten gleichermaßen für eine sorgfältig entwickelte domänenspezifische Sprache, die nicht von XML abgeleitet ist.
Roman Starkov
1
Und daher die letzte Zeile meiner Antwort und das Beispiel, das auf Qt zeigt.
Timothy Baldridge
Es gibt in der Tat eine lange Geschichte von UI-Metasprachen. nb das Motiv UIL und auch David Flannigans Pre-Java-Arbeit an seiner Xmt-Bibliothek.
SDG
6

Die 8 Vorteile von XAML für UI und darüber hinaus

  • XAML beschreibt Daten auf prägnante, aber für Mensch und Maschine verständliche Weise
  • XAML ist für viele Datentypen nützlich
  • XAML verwendet typisierte Objektmodelle zur besseren Programmierung und Validierung
  • XAML ist erweiterbar und versionstolerant
  • XAML ist Toolable
  • XAML ist XML (es profitiert von der Verfügbarkeit von Standardwerkzeugen, ist für Menschen lesbar usw.)
  • XAML aktiviert ereignisgesteuerte Programmiermodelle
  • XAML kann kompiliert oder interpretiert werden

Ich betrachte XAML als "Zwischensprache" der Benutzeroberfläche. Sie können es mit jeder Programmiersprache und auf verschiedenen Plattformen verwenden. Es ermöglicht eine sprach-, plattform- und geräteunabhängige Beschreibung der Benutzeroberfläche.

Robert Harvey
quelle
1
Sind diese 8 Vorteile Ihrer Meinung nach gültig und / oder korrekt?
Steven Evers
5
Vorteil # 9 - XAML verbessert Ihren Lebenslauf
jfrankcarr
3
@ SnOrfus: Mehr oder weniger. Prägnant ist zum Beispiel fraglich. : P
Robert Harvey
1
"XAML ist XML" ist ebenfalls fraglich. XML legt beispielsweise ungewöhnlich strenge Einschränkungen für Kommentare fest, die ein nützliches Werkzeug zum vorübergehenden Entfernen von Code sind.
Roman
3
Viele davon fallen unter "XAML ist XML". Ich würde @SnOrfus mit "Ja, auf eine Art Power-Point-Präsentation eines Verkäufers" antworten.
Psr
3

Durch die Verwendung von XML erhalten Sie Metadaten in einem Format, das von einer Vielzahl von Parsern und Parsing-Tools unterstützt wird. Zumindest theoretisch erlaubt dies jedem, mit einer beliebigen Sprache Meta-Programme dagegen durchzuführen.

In der Praxis lassen Sie XML mit einem offeneren Standard erscheinen. Sie können argumentieren, dass es nur ein Markup wie ein Browser ist, aber einfacher zu analysieren ist.

Dies sind echte Vorteile, aber in der Praxis ist außerhalb der XAML zu viel los, als dass die Vorteile fürchterlich wichtig wären.

psr
quelle
1
Warum gilt dieses Argument für XAML, nicht jedoch für eine Programmiersprache? "<While Condition="a == true"><Print>Hi!</Print></While>"jemand? Das ist offensichtlich grausam; Warum ist die Darstellung der Benutzeroberfläche Ihrer Meinung nach anders?
Roman Starkov
@romkyns - Ich habe nicht für XAML gestritten, die Frage wurde gestellt, ob es irgendwelche Vorteile gibt (meine Interpretation). Warum ich denke, dass die Benutzeroberfläche anders ist - wahrscheinlich ist das Layout der Benutzeroberfläche einfacher darzustellen als beliebiger Code, sodass das XML weniger grausam ist als beispielsweise für XC # (die XML-Syntax für C #, für die wir beten müssen, existiert nie). Tatsächlich bin ich ziemlich zweifelhaft, welche realen Vorteile XAML gegenüber .NET-Code mit angemessener API für die Metacodierung oder einer benutzerdefinierten Sprache mit veröffentlichter Syntax bietet. (Keiner von beiden lässt MS einen "XML-gesteuerten" Aufkleber auf die Box
kleben
1

XAML wurde entwickelt, um einfach eine Hierarchie von Objekten darzustellen und nicht nur für GUI wie XPS und WF. Die Verwendung von XAML zum Erstellen von Anwendungen hilft Ihnen bei der Bereitstellung von Rich Internet Applications (RIA) sowie Rich Desktop-Anwendungen.

Die Verwendung von XAML als textbasierte deklarative Darstellung der GUI bringt die MS-Entwicklungstools anderen Technologien, die in der Branche als Standard gelten, wie z. B. HTML, einen Schritt näher.

Einige der Hauptfunktionen von XAML (über Windows Forms) sind:

  1. Mit XAML können SVG-Bilder (Scalable Vector Graphics) und Transformationen gezeichnet werden. Einer der Vorteile von Vektorgrafiken besteht darin, dass sie auf jede Größe skaliert werden können, ohne an Qualität zu verlieren, sodass Sie sich keine großen Sorgen um die Auflösung des Computers des Benutzers machen müssen.

  2. Windows Forms litten im Allgemeinen unter einer eingeschränkten Unterstützung für die automatische Platzierung von Steuerelementen aufgrund von Windows-Größenänderungen und Änderungen in der GUI-Oberfläche (z. B. wenn neue Steuerelemente hinzugefügt oder entfernt wurden). Steuerelemente werden durch explizite Angabe von Zeilen- und Spaltenwerten für jedes Steuerelement über die GUI oder den Programmcode positioniert. Während XAML dieses Verhalten zulässt, bietet es eine einfachere Möglichkeit, dieses Problem zu lösen, indem das Stack Control-Steuerelement und das Wrap Panel-Steuerelement bereitgestellt werden.

  3. In XAML können Sie mithilfe der Verschachtelung neue Steuerelemente aus vorhandenen direkt in der XAML erstellen. Sie können ein Bildsteuerelement zusammen mit einem Stapelbedienfeld innerhalb des Schaltflächensteuerelements verschachteln, um einen neuen Schaltflächentyp zu erstellen, dh eine Schaltfläche mit einem Bild. Da dieses Steuerelement in XAML erstellt wird, müssen Sie keine separate DLL erstellen, um es wie in Windows Forms zu verwenden. Beispiel:

    <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. Mit Styling und Vorlagen können Sie das Erscheinungsbild von Steuerelementen auf mehreren Ebenen anpassen, ähnlich wie bei CSS und HTML. Keine prozedurale Programmierung erforderlich. Eine Änderung kann sich auf die gesamte Benutzeroberfläche auswirken.

  5. XAML ermöglicht erweiterte Datenbindungstechniken, die in Windows Forms nicht verfügbar sind. Sie können sogar ein Steuerelement an die Datenwerte eines anderen binden.

  6. XAML bietet ein integriertes Navigationsframework, das Sie verwenden oder durch andere Frameworks ersetzen können. Tatsächlich sind WPF, Silverlight und XAML so konzipiert, dass sie das MVVM-Muster nutzen, das Sie mit Windows Forms nicht genau erreichen können.

  7. Mit der Einführung von XAML konnte der Code hinter den Dateien stärker von den Schnittstellendesigndateien isoliert werden. Natürlich besteht immer noch die Abhängigkeit einiger Namen. Die Tatsache, dass XAML eine textbasierte deklarative Sprache ist, die XML und HTML ähnelt und keinen Compiler erfordert, ermöglicht es Schnittstellenentwicklern, separate XAML-Dateien zu erstellen, die später in den Code hinter den Dateien integriert werden. Dies ist anders als bei Windows-Formularen, bei denen die GUI als Projektcode im Projekt eng miteinander verbunden ist. Designer, die XAML verwenden, können Visual Studio sogar verlassen und das MS Expression Blend-Tool zum Erstellen ihrer GUI verwenden. MS Expression Blend wurde eher für Designer als für Programmierer erstellt.

  8. XAML bietet erweiterte native Techniken für die Animation und Videoanzeige, ohne dass Tools von Drittanbietern erforderlich sind.

  9. XAML sollte die Entwicklung von Windows-basierter Software und Webseiten enger gestalten als die Verwendung von ASP.NET und Windows Forms. Silverlight und WPF verwenden beide XAML (obwohl es einige Unterschiede gibt, aber ein großer Teil der Erfahrung übertragbar ist).

  10. Ein SDK für XAML enthält interessante Steuerelemente und ermöglicht es Ihnen unter anderem, die Präsentation im Assistenten- / Storyboard-Stil zu unterstützen, ohne ein Tool eines Drittanbieters zu verwenden.

Keine Chance
quelle
Sie haben sich offensichtlich viel Mühe gegeben, aber Sie haben einen wichtigen Punkt falsch verstanden: Sie diskutieren die Vorteile von WPF , nicht von XAML . XAML ist nur eine einzige Darstellung von WPF-Benutzeroberflächen, die zufällig XML-basiert ist.
Roman
@romkyns, danke für deinen Kommentar. Der Fragentitel lautet: "Erklären Sie die Vorteile einer XML-basierten Syntax (z. B. XAML) anstelle von normalem Quellcode (z. B. WinForms)." - Keine Erwähnung von WPF auch im Körper.
NoChance
Das ist richtig, und dennoch wird in Ihrer Antwort immer noch über WPF gesprochen (aber es wird fälschlicherweise XAML genannt). Verstehst du was ich jetzt meine? XAML bietet kein integriertes Navigationsframework. WPF tut es. Das Styling ist eine Funktion von WPF, nicht von XAML. Usw.
Roman
@romkyns, danke für die Klarstellung, ich verstehe Ihren Standpunkt. Ihr Vorschlag, dass XAML selbst völlig unabhängig von diesen Funktionen ist, ist für mich neu und ich bezweifle es irgendwie. Ich könnte die Chance bekommen, mehr darüber zu recherchieren. Ich schätze es, darauf hinzuweisen.
NoChance
1

XAML beschreibt Daten auf prägnante, aber für Mensch und Maschine verständliche Weise

Theoretisch ist jede neue Sprache etwas, das Sie lernen müssen. Sehr viele Menschen würden es vorziehen, viele / mehrere Sprachen zu sprechen - da dies als Sprachreichtum angesehen wird. Dies ist vorhanden und bezieht sich auf natürliche Sprachen, ist jedoch für Programmiersprachen nicht erforderlich.

Ich selbst programmiere in ziemlich vielen Sprachen, einschließlich Batch-Dateien, Perl, Lua, Python, C ++ und C #. Erinnere ich mich an alle? Nein, ich kann mit einer anderen Sprache wechseln, aber es braucht Zeit. Schreiben Sie jetzt in C # und wechseln Sie dann zu C ++. Je nach Programmiersprache und "Dialekt" können Sie leicht verwechseln, ob es sich um NULL, null, nil oder nullptr handelt. (c ++ normal, c ++ verwaltet)

xaml ist xml "Dialekt". Ist es leicht zu lernen? basierend auf ziemlich vielen Fragen in anderen Foren würde ich nein sagen.

Ersetzt es C #? Nein.

Die Antwort liegt auf der Hand - ich würde es vorziehen, eine Programmiersprache zu haben, die gut gestaltet ist (C # - z. B. Datentypreflexion), eine gute Leistung (wie C ++) und skriptfähig (C # -Skript, C ++ / cling oder noch besser) hat.

Derzeit erfüllen C ++ und C # meine Anforderungen nicht vollständig, aber xaml ist ein seltsames Datenformat, das ich nicht als lernwürdig erachten würde (nur umwickeln und vor den Augen des Entwicklers verbergen).

Am Ende möchte ich die natürliche Sprache (gesprochen) mit der Programmiersprache (künstlich konstruierte Sprache) in derselben Sprache neu kombinieren - damit sie für die Kommunikation und von Programmierern verwendet werden kann - dies ist später in der Zukunft, wenn die Programmiersprache "Architektur" oder "Entwurfsmuster" werden dokumentiert.

  1. Mit XAML können SVG-Bilder (Scalable Vector Graphics) und Transformationen gezeichnet werden.
  2. ...

XAML führt in der Tat einige neue, verbesserte Funktionen gegenüber Winforms ein. Es lohnt sich daher, darüber nachzudenken, sie zu verwenden. Wenn Sie jedoch möchten, dass Ihre Benutzeroberfläche vollständig dynamisch wird, muss xaml durch einen ähnlichen Laufzeitcode ersetzt werden.

Letztendlich sollte die Benutzeroberfläche einfach zu bedienen sein - und das bedeutet, dass ein Mindestmaß an Steuerelementen ähnlich aussieht (Abbrechen, OK, Verknüpfungen, gleiche Breite / Höhe usw.), was bedeutet, dass die Benutzeroberfläche mehr oder weniger automatisch generiert werden kann.

Übrigens - ist es möglich, direkt in xaml C # -Code einzubetten? Metadaten, Zeichenfolge, Kommentare?

Es ist manchmal ordentlich, Sprache so zu missbrauchen oder zu missbrauchen, wie es sich niemand vorgestellt hat. Perl macht das oft, aber ich bevorzuge eine sauberere Syntax als eine kryptische. Aber C # gegen xaml - ich würde C # wählen.

TarmoPikaro
quelle
0

Ein Vorteil ist, dass die XAML in anderen Anwendungen verwendet werden kann. Ein gutes Beispiel ist, dass die XAML von einem Designer / Künstler in Blend entwickelt werden kann, während die Interna (Code dahinter) im Visual Studio codiert werden.

Ich glaube, es war der Versuch von Microsoft, das UI-Markup vom Code dahinter zu trennen und es zu ermöglichen, dass die Benutzeroberfläche von Nicht-Programmierern mit einem Tool wie Blend codiert wird.

Aber viele Geschäfte haben Blend nicht, so dass es für viele von uns wie eine Neuerfindung des Rades aussieht.

Hier sind 8 Punkte, die von jemandem gekauft wurden, der näher am Windows-Client ist:

8 XAML-Vorteile

Jon Raynor
quelle
1
Der Autor Ihres Links vergleicht XAML mit einer ziemlich ausführlichen Allzweck-Programmiersprache. Vielleicht ist XAML kompakter als C # oder Java. Das ist ein Punkt gegen C # und Java, nicht wirklich ein Punkt zugunsten von XAML. Der entsprechende Ruby-Code wäre genauso kompakt, wobei bei Bedarf die volle Leistung von Ruby zur Verfügung steht.
Kevin Cline
Das ist ein Vorteil des Blend-Tools, nicht von XAML? Blend hätte als Designer-orientierte GUI existieren können, die Code hinter den Kulissen erstellt hat?
MarkJ
1
Für diejenigen von uns, die Delphi verwenden, sieht es wirklich wie eine Neuerfindung des Rades aus. Es hatte von Anfang an (1995) ein einfaches, codeunabhängiges DSL für das Formularlayout und ohne all das hässliche, sperrige Gepäck, das XML mit sich führt.
Mason Wheeler
@MarkJ - Blend richtet sich speziell an Designer, zuvor war es in Visual Studio nur Drag & Drop. Vor WPF waren in Windows Forms nur eingeschränkte Funktionen für Animation und GUI-Funktion integriert. Blend hätte vorher existieren können, aber der Designer müsste mit C # - oder .net (.cs) -Codedateien vertraut sein. XAML Sie können Markups, mit denen ein Designer bereits vertraut ist (HTML, XML usw.)
Jon Raynor
Ich schlage vor, Blend könnte eine Designer-orientierte Benutzeroberfläche gewesen sein, die C # -Code-Dateien erstellt hat. Der Designer muss nicht mit der Struktur einer C # -Codedatei vertraut sein, genauso wie er die interne Binärstruktur eines JPG oder PNG nicht verstehen muss, um Bilder in Photoshop zu erstellen.
MarkJ
-1

Ein Punkt, den ich in vielen Antworten nicht sehe, ist, dass xaml den Kern der wpf-Desgin-Prinzipien einschließt. Trennen Sie die visuelle Darstellung und die visuelle Logik (in der Praxis ist dies auf Trigger und dergleichen beschränkt, aber unter der Annahme, dass keine benutzerdefinierten Steuerelemente vorhanden sind, ist dies oft alles, was Sie benötigen) von der Geschäftslogik. Dies gilt auch für Paare, wie andere mit einer ausdrucksstarken Syntax für das Binden, angehängte Eigenschaften und andere Metadaten festgestellt haben, die im normalen C # -Code ausführlicher sein können.

Persönlicher gesagt, eine Sache, die ich an xaml gut finde, ist, dass es besser die visuelle Hierarchie von Steuerelementen darstellt als nur Code zu generieren. Auf einen Blick ist leicht zu erkennen, wie ein Steuerelement mit den anderen zusammenhängt.

Pfoten
quelle