通常のソースコード(WinFormsなど)ではなく、XMLベースの構文(XAMLなど)を使用する利点を説明してください。[閉まっている]


8

まず、この質問はWPFとWinFormsに関するものではないことに注意してください。

マイクロソフトがXAMLを発明して、コンパイル可能なC#コードを生成する「古い」アプローチを採用するようになった最高の利点は何ですか。

私の印象では、他の開発者は多くの欠点を見つけているようですが、Microsoftはそれを受け入れました。つまり、私には見られない利点があるということです。私が行方不明になっていることを説明してください。


4
これは、Aの重複?:ないですprogrammers.stackexchange.com/questions/139382/...
user16764

いいえ、ここ説明した理由で閉鎖されたため、FAQとガイドラインに沿って作成されていることが明示されています。
Timwi

@RobertHarvey取り戻しますが、実際には異なります。XMLベースの構文が、C#のような「通常のソースコード」ではなく、特別な目的の言語よりも優れていることを尋ねたかったのです。
Roman Starkov

あなたにとって、または言語/ツールの実装者にとってのメリットは?
jk。

2
@Timwi私はそれについて知りません。マイクロソフト製品のメリットに関係なく、Microsoft製品を購入せざるを得ないように見える人が何人かいます。
クリスハーパー

回答:


7

XAMLの最大の利点は、宣言的な方法でUIを記述できることです。つまり、「ボックスを作成し、サイズを変更する」とあまり言わないでください。「ボックスを作成してから、このサイズです」と言う

XAMLが優れている2番目の場所は、実際にバインディングを利用することです。例えば:

<Button IsEnabled="{Binding IsBusy}">

ビューモデルでは、ビジネスに取り掛かり、IsBusyをtrueまたはfalseに設定できます。変化すると、Buttonの有効状態が自動的に切り替わります。

より複雑な例として:

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

この例では、リスト(オプション)にバインドし、すべてのアイテムのリストボックスにアイテムを作成しています。ここですばらしいのは、リストにアイテムを追加または削除すると、UIがリストの状態に自動的に同期されることです。各アイテムのチェックボックスをクリックすると、基になるオブジェクトがUIに一致するように自動的に更新されます。このような強力なツールを使用して、WinFormsアプリのすべてのイベントを接続するのにかかる時間をほんのわずかの時間でUIをハッキングしました。

一般に、これはすべてUIを宣言形式で記述できることを意味し、これは生産性を大幅に向上させます。ただし、これにはコストがかかります。コードが一般化されなくなるため、WinFormsアプリのパフォーマンスが向上する可能性があります。しかし、データグリッドに40,000行を表示するようなことをしているのでない限り、XAMLを使用しても大きな速度低下に気付くことはないでしょう。

また、他のUIライブラリがXMLなしで同じ目標を達成することにも言及する必要があります。たとえば、QTはJsonを使用します(http://labs.qt.nokia.com/2009/05/13/qt-declarative-ui/)


4
あなたが言及するすべての利点は、XMLから派生していない、慎重に設計されたドメイン固有の言語にも等しく適用できます。
Roman Starkov

1
したがって、私の回答の最後の行とQtを指す例です。
ティモシーボールドリッジ

実際、UIメタ言語には長い歴史があります。nb Motif UILと、David FlanniganによるJava導入前の作業は、彼のXmtライブラリで行われています。
sdg

6

UIおよびそれ以降のXAMLの8つの利点

  • XAMLはデータを簡潔ですが、人間と機械が理解できる方法で記述します
  • XAMLは多くのタイプのデータに役立ちます
  • XAMLは型付きオブジェクトモデルを使用してプログラミングと検証を改善
  • XAMLは拡張可能でバージョントレラントです
  • XAMLはツール可能です
  • XAMLはXMLです(既製のツールを利用できること、人間が読めるなどのメリットがあります)。
  • XAMLによるイベント駆動型プログラミングモデルの実現
  • XAMLはコンパイルまたは解釈できます

私はXAMLをUIの「中間言語」と見なしています。任意のプログラミング言語で、さまざまなプラットフォームで使用できます。ユーザーインターフェイスの言語、プラットフォーム、デバイスに依存しない説明を可能にします。


1
あなたの意見では、これらの8つのメリットは有効かつ/または正確ですか?
Steven Evers

5
利点#9-XAMLが再開を強化
jfrankcarr

3
@SnOrfus:多かれ少なかれ。たとえば、簡潔です。:P
ロバートハーベイ

1
「XAML is XML」も議論の余地があります。たとえば、XMLはコメントに非常に厳しい制限を課します。たとえば、コメントは一時的に一部のコードを削除するのに役立つツールです。
Roman Starkov

3
これらの多くは「XAML is XML」に該当します。私は@SnOrfusに「そうです、セールスマンのパワーポイントプレゼンテーションのようなものです」と答えます。
psr

3

XMLを使用すると、膨大な数のパーサーと解析ツールがサポートする形式でメタデータが提供されます。少なくとも理論的には、これにより、誰でも任意の言語を使用してメタプログラミングを行うことができます。

実際には、XMLを使用すると、よりオープンな標準のように見えます。これはブラウザのような単なるマークアップですが、解析は簡単です。

これらは実際のメリットですが、実際には、XAML以外ではあまりにも多くのことが行われているため、メリットはそれほど重要ではありません。


1
この議論がXAMLに適用されるのに、プログラミング言語には適用されないのはなぜですか?"<While Condition="a == true"><Print>Hi!</Print></While>"誰でも?それは明らかにひどいです。UIの表現が異なるのはなぜですか。
Roman Starkov

@romkyns-XAMLについては議論していませんでしたがメリットがあるかどうかを質問しました(私の解釈)。なぜに関しては、私は XMLはそれが(私たちは祈る必要があることをC#のXML構文は存在しません)XC#、たとえば、ためになるほどひどいですので、おそらくUIレイアウトは、任意のコードよりも表現するために簡単です- UIが違うと思います。実際、メタコーディングに適したAPIを使用した.NETコードや、公開された構文を使用したカスタム言語に対するXAMLの実際の利点については、どちらかと言えば疑問です。(いずれも、MSはボックスの「XML駆動型」ステッカーを置くことができます。)
PSR

1

XAMLは、XPSやWFなどのGUIだけでなく、単にオブジェクトの階層を表すように設計されています。XAMLを使用してアプリケーションを構築すると、リッチインターネットアプリケーション(RIA)やリッチデスクトップアプリケーションを提供するのに役立ちます。

テキストベースのGUIの宣言表現としてXAMLを使用すると、MS開発ツールが、HTMLなどの業界で標準と見なされている他のテクノロジーに一歩近づきます。

XAML(Windowsフォーム経由)の主な機能は次のとおりです。

  1. XAMLを使用すると、Scalable Vector Graphics(SVG)画像と変換を描画できます。ベクターグラフィックスの利点の1つは、品質を失うことなく任意のサイズに拡大縮小できるため、ユーザーのコンピューターの解像度をあまり気にする必要がないことです。

  2. 一般に、Windowsフォームは、ウィンドウのサイズ変更とGUIサーフェスの変更(新しいコントロールが追加または削除された場合など)の結果として、コントロールの自動配置のサポートが制限されていました。コントロールは、GUIまたはプログラムコードを通じて各コントロールの行と列の値を明示的に指定することによって配置されます。XAMLではこの動作が可能ですが、スタックコントロールコントロールとラップパネルコントロールを提供することで、この問題を解決するより簡単な方法が導入されています。

  3. XAMLでは、ネストを使用して、XAMLで直接、既存のコントロールから新しいコントロールを構築できます。スタックパネルと一緒にボタンコントロール内にイメージコントロールをネストして、新しいタイプのボタン、つまり画像付きのボタンを作成できます。このコントロールはXAMLで作成されるため、Windowsフォームの場合のように、それを使用するために別のdllを作成する必要はありません。例:

    <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. スタイルとテンプレートを使用すると、CSSやHTMLの機能と同様に、いくつかのレベルでコントロールの外観をカスタマイズできます。手続き型プログラミングは必要ありません。1つの変更をGUI全体に反映できます。

  5. XAMLを使用すると、Windowsフォームでは使用できない高度なデータバインディング手法を使用できます。1つのコントロールを別のデータ値にバインドすることもできます。

  6. XAMLは、他のフレームワークで使用または置換できる組み込みのナビゲーションフレームワークを提供します。実際、WPF、Silverlight、およびXAMLは、Windowsフォームでは正確に実現できないMVVMパターンを利用するように設計されています。

  7. XAMLの導入により、ファイルの背後にあるコードを、インターフェース設計ファイルからより大きな対象者に分離することができました。もちろん、一部の名前の依存関係はまだ存在しています。ただし、XAMLはコンパイラーを必要としないXMLおよびHTMLと同様のテキストベースの宣言型言語であるため、インターフェイスの設計者は個別のXAMLファイルを作成して、後でファイルの背後にあるコードと統合できます。これは、プロジェクトの手続き型コードとしてGUIが密結合されているWindowsフォームの場合とは異なります。XAMLを使用しているデザイナーは、Visual Studioを離れ、MS Expression Blendツールを使用してGUIを作成することもできます。MS Expression Blendは、プログラマーではなくデザイナー向けに作成されています。

  8. XAMLは、サードパーティのツールを必要とせずに、アニメーションおよびビデオ表示のための高度なネイティブテクニックを提供します。

  9. XAMLは、ASP.NETおよびWindowsフォームを使用するよりも、WindowsベースのソフトウェアとWebページの開発をより密接にすることを目的としていました。SilverlightとWPFはどちらもXAMLを使用します(多少の違いはありますが、エクスペリエンスの大部分は転送可能です)。

  10. SDK for XAMLには興味深いコントロールが含まれており、サードパーティのツールを使用せずにウィザードやストーリーボードスタイルのプレゼンテーションをサポートすることができます。


あなたは明らかにこれにかなりの労力を費やしましたが、1つの重要なポイントを誤解しました:XAMLではなくWPFの利点について議論していることです。XAMLはWPF UIの単一の表現にすぎませんが、たまたまXMLベースです。
Roman Starkov

@romkyns、コメントありがとうございます。質問のタイトルは、「通常のソースコード(WinFormsなど)ではなく、XMLベースの構文(XAMLなど)を使用する利点を説明してください」です。-本体でもWPFについての言及はありません。
NoChance

その通りですが、あなたの答えはまだWPFについて説明しています(ただし、誤ってXAMLと呼んでいます)。私の今の意味がわかりますか?XAMLは組み込みのナビゲーションフレームワークを提供しません。WPFはそうします。スタイリングはXAMLではなくWPFの機能です。等
ロマン・スターコフ

@romkyns、説明をありがとう、私はあなたの意見を理解しています。XAML自体がこの機能から完全に独立しているというあなたの提案は私にとって新しいものであり、私はそれをちょっと疑っています。もっと研究する機会があるかもしれません。これを指摘していただきありがとうございます。
NoChance

1

XAMLはデータを簡潔ですが、人間と機械が理解できる方法で記述します

理論的には、すべての新しい言語はあなたが学ぶ必要があるものです。非常に多くの人々は、言語の豊かさと見なされているため、多くの/複数の言語を話すことを好みます。これは存在し、自然言語に関連していますが、プログラミング言語には必要ありません。

私は自分で、バッチファイル、perl、lua、python、c ++、c#など、かなり多くの言語でプログラミングをしています。全部覚えていますか?いいえ、別の言語を使用して切り替えることはできますが、時間がかかります。今すぐC#で書き込み、C ++に切り替えるだけで、プログラミング言語とその「方言」に応じて、NULL、null、nil、またはnullptrを簡単に混同できます。(C ++通常、C ++管理)

xamlはxmlの「方言」です。学ぶのは簡単ですか?他のフォーラムでの非常に多くの質問に基づいて、私はノーと言うでしょう。

C#を置き換えるものですか?番号。

答えは非常に明白です-うまく設計された(C#-たとえばデータ型リフレクション)、パフォーマンスがよく(C ++のように)、スクリプト可能(C#スクリプト、C ++ / clingまたはそれ以上)の1つのプログラミング言語を使用したいと思います

現在、C ++とC#は私のニーズを完全には満たしていませんが、xamlは奇妙なデータ形式です。これは、学習する価値があるとは見なしません(ラップするだけで、開発者の目から隠します)。

最後に、自然言語(音声)とプログラミング言語(人工的に構成された言語)を同じ1つの言語に再結合します。これにより、コミュニケーションやプログラマーが使用できるようになります。これは、将来、プログラミング言語「アーキテクチャー」で使用されます。または「設計パターン」が文書化され始めます。

  1. XAMLを使用すると、Scalable Vector Graphics(SVG)画像と変換を描画できます。
  2. ...

XAMLは確かにwinformsに比べていくつかの新しい改善された機能を導入しているので、それを使用することを検討する価値があります。ただし、最終的にユーザーインターフェイスを完全に動的にする場合は、xamlを同様のランタイムコードに置き換える必要があります。

結局のところ、ユーザーインターフェイスは簡単に使用できるはずです。つまり、コントロールの最小セットを意味します。コントロールは似ています(キャンセル、OK、ショートカット、同じ幅/高さなど)。つまり、UIは多かれ少なかれ自動生成できます。

ところで、xaml C#コードに直接埋め込むことは可能ですか?メタデータ、文字列、コメント?

だれもそれを使用することを想像しなかった方法で、言語を誤用したり乱用したりすることは、時々整然としています。Perlはこれをたくさん行いますが、私は不可解な構文よりも何とかよりクリーンな構文を好みます。しかし、C#とxaml-C#を選択しました。


0

XAMLを他のアプリケーションで使用できるという利点があります。良い例は、内部(コードビハインド)がVisual Studioでコード化されている間に、デザイナー/アーティストがBlendでXAMLを開発できることです。

マイクロソフトでは、UIマークアップとコードビハインドを個別に試み、Blendなどのツールを使用して、プログラマー以外のユーザーがUIをコーディングできるようにしたと思います。

しかし、多くの店はBlendを持っていないので、私たちの多くにとって、それは車輪の再発明のように見えます。

これは、Windowsクライアントに近い人が購入した8ポイントです。

8 XAMLの利点


1
リンクの作成者は、XAMLをかなり冗長な汎用プログラミング言語と比較します。たぶん、XAMLはC#やJavaよりコンパクトです。これはC#とJavaに対するポイントであり、実際にはXAMLを支持するポイントではありません。同等のRubyコードはコンパクトであり、必要に応じてRubyの全機能を利用できます。
kevin cline

これは、XAMLではなくBlendツールの利点ですか?Blendは、舞台裏でコードを作成するデザイナー指向のGUIとして存在できたでしょうか。
MarkJ 2012年

1
それは、Delphiを使用している私たちにとって、車輪の再発明のように見えます。フォームレイアウト用のシンプルでコードに依存しないDSLが最初(1995年)からありました。XMLが運ぶ醜くてかさばる手荷物は一切ありませんでした。
メイソンウィーラー

@MarkJ-Blendは特にVisual Studioでのドラッグアンドドロップである以前は、デザイナー向けに設計されています。WPFが登場する以前は、WindowsフォームにはアニメーションとGUIブリングのための組み込み機能が制限されていました。Blendは以前から存在していた可能性がありますが、設計者はC#または.net(.cs)コードファイルに精通している必要があります。マークアップできるXAMLは、デザイナーが既に使い慣れているものです(HTML、XMLなど)
Jon Raynor

BlendがC#コードファイルを作成するデザイナー指向のGUIであった可能性があることを示唆しています。Photoshopで画像を作成するためにJPGまたはPNGの内部バイナリ構造を理解する必要がないのと同様に、デザイナーはC#コードファイルの構造に精通している必要はありません。
MarkJ 2012年

-1

多くの回答で私が見ない1つの点は、xamlがwpf desginプリンシパルのコアを促進するということです。視覚的表現と視覚的ロジックを分離します(実際には、これはトリガーなどに限定されますが、カスタムコントロールがないと仮定すると、これで十分なことがよくあります)。これはまた、他の人がバインディング、アタッチされたプロパティ、および通常のC#コードではより詳細になる可能性があるその他のメタデータの表現構文で指摘しているように、相性が良いです。

より個人的な意見として、xamlの良い点の1つは、単にコードを生成するだけでなく、コントロールの視覚的な階層を表すことです。あるコントロールが他のコントロールとどのように関連しているかが一目でわかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.