Vui lòng giải thích (các) lợi ích của việc sử dụng cú pháp dựa trên XML (ví dụ XAML) thay vì mã nguồn thông thường (ví dụ WinForms)? [đóng cửa]


8

Trước hết, xin lưu ý rằng câu hỏi này không phải là về WPF so với WinForms.

Những lợi ích xếp hạng cao nhất đã khiến Microsoft phát minh ra XAML theo hướng tiếp cận cũ của việc tạo mã C # có thể biên dịch được là gì?

Ấn tượng của tôi là các nhà phát triển khác dường như tìm thấy rất nhiều nhược điểm của nó, nhưng Microsoft đã đồng ý với nó, điều đó có nghĩa là có một lợi ích mà tôi không thấy. Tôi muốn bạn giải thích cho tôi những gì tôi đang thiếu.


4
Đây có phải là một bản sao không?: Lập trình
viên.stackexchange.com / questions / 139382 / Giả

Không, bởi vì cái đó đã bị đóng vì những lý do được nêu ở đây , trong khi cái này được viết rõ ràng để phù hợp với Câu hỏi thường gặp và hướng dẫn.
Timwi

@RobertHarvey Tôi lấy lại, nó thực sự khác biệt; Tôi muốn hỏi làm thế nào cú pháp dựa trên XML tốt hơn một ngôn ngữ có mục đích đặc biệt, thay vì "mã nguồn thông thường" như C #.
Roman Starkov

những lợi ích cho bạn hoặc cho những người thực hiện ngôn ngữ / công cụ?
jk.

2
@Timwi Tôi không biết về điều đó. Tôi biết một số người dường như buộc phải mua sản phẩm của Microsoft bất kể nó sẽ mang lại lợi ích gì cho họ.
Kris Harper

Câu trả lời:


7

Lợi ích lớn nhất của XAML là nó cho phép bạn mô tả giao diện người dùng của mình theo cách khai báo. Đó là, bạn không nói quá nhiều "tạo một hộp, bây giờ thay đổi kích thước nó", bạn nói "tạo một hộp và btw, đó là kích thước này"

Vị trí thứ hai mà XAML tỏa sáng là nó thực sự tận dụng các ràng buộc. Ví dụ:

<Button IsEnabled="{Binding IsBusy}">

Trong mô hình chế độ xem của bạn, bạn có thể chuyển về doanh nghiệp của mình và đặt IsBusy thành đúng hoặc sai và khi thay đổi, trạng thái kích hoạt của Nút sẽ tự động chuyển qua lại.

Vì vậy, như một ví dụ phức tạp hơn:

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

Trong ví dụ này, chúng tôi ràng buộc với một danh sách (Tùy chọn) và tạo một mục trong hộp danh sách cho mỗi mục. Điều thú vị ở đây là khi chúng ta thêm các mục vào danh sách hoặc xóa chúng, UI sẽ tự động được đồng bộ hóa với trạng thái của danh sách của chúng ta. Khi chúng tôi nhấp vào hộp kiểm trên mỗi mục, các đối tượng cơ bản được tự động cập nhật để phù hợp với giao diện người dùng. Với các công cụ mạnh mẽ như thế này, tôi đã hack các UI trong một phần nhỏ thời gian để tôi kết nối tất cả các sự kiện trong ứng dụng WinForms.

Nói chung, tất cả điều này có nghĩa là bạn có thể viết UI của mình ở định dạng khai báo và đây là một mức tăng năng suất lớn. Mặc dù, tôi phải đề cập rằng điều này làm với chi phí. Bạn có thể sẽ nhận được nhiều hiệu suất hơn từ ứng dụng WinForms vì mã sẽ ít khái quát hơn. Nhưng trừ khi bạn đang làm một cái gì đó như hiển thị 40.000 hàng trong lưới dữ liệu, bạn có thể sẽ không nhận thấy sự chậm chạp lớn khi sử dụng XAML.

Cũng cần đề cập rằng các lib UI khác hoàn thành mục tiêu tương tự mà không cần XML. Chẳng hạn, QT sử dụng Json (http://labs.qt.nokia.com/2009/05/13/qt-declarative-ui/)


4
Tất cả các lợi ích bạn đề cập đều có thể áp dụng như nhau đối với ngôn ngữ dành riêng cho miền được thiết kế cẩn thận không có nguồn gốc từ XML.
Roman Starkov

1
Và do đó, dòng cuối cùng của câu trả lời của tôi và ví dụ chỉ vào Qt.
Timothy Baldridge

Thực sự có một lịch sử lâu dài của các ngôn ngữ meta UI. nb Motif UIL và cũng là tác phẩm tiền Java của David Flannigan trên Thư viện Xmt của mình.
sdg

6

8 lợi ích của XAML cho UI và hơn thế nữa

  • XAML mô tả dữ liệu một cách ngắn gọn, nhưng con người và máy móc có thể hiểu được
  • XAML hữu ích cho nhiều loại dữ liệu
  • XAML sử dụng các mô hình đối tượng đã nhập để lập trình và xác nhận tốt hơn
  • XAML có thể mở rộng và dung sai phiên bản
  • XAML là công cụ
  • XAML là XML (nó được hưởng lợi từ sự sẵn có của các công cụ sẵn có, nó có thể đọc được, v.v.)
  • XAML cho phép các mô hình lập trình hướng sự kiện
  • XAML có thể được biên dịch hoặc giải thích

Tôi xem XAML như một "ngôn ngữ trung gian" của UI; bạn có thể sử dụng nó với bất kỳ ngôn ngữ lập trình nào và trên các nền tảng khác nhau. Nó cho phép mô tả ngôn ngữ, nền tảng và thiết bị độc lập với giao diện người dùng.


1
Theo bạn, 8 lợi ích đó có hợp lệ và / hoặc chính xác không?
Steven Evers

5
Lợi ích số 9 - XAML tăng cường sơ yếu lý lịch của bạn
jfrankcarr

3
@SnOrfus: Nhiều hơn hoặc ít hơn. Súc tích là tranh cãi, ví dụ. : P
Robert Harvey

1
"XAML là XML" cũng có thể tranh cãi. Ví dụ, XML đặt các giới hạn nghiêm ngặt khác thường đối với các nhận xét, là một công cụ hữu ích để tạm thời xóa một số mã.
Roman Starkov

3
Rất nhiều trong số này thuộc "XAML là XML". Tôi sẽ trả lời @SnOrfus "có, theo cách trình bày điểm mạnh của nhân viên bán hàng".
psr

3

Sử dụng XML cung cấp cho bạn siêu dữ liệu theo định dạng mà một số lượng lớn các trình phân tích cú pháp và các công cụ phân tích cú pháp hỗ trợ. Ít nhất về lý thuyết, điều này cho phép bất cứ ai lập trình meta chống lại nó bằng bất kỳ ngôn ngữ nào.

Thực tế hơn, XML cho phép bạn có vẻ như là một tiêu chuẩn mở hơn. Bạn có thể tranh luận rằng nó chỉ là đánh dấu như một trình duyệt, nhưng dễ phân tích hơn.

Đây là những lợi ích thực sự, nhưng trong thực tế có quá nhiều thứ đang diễn ra bên ngoài XAML để những lợi ích trở nên cực kỳ quan trọng.


1
Tại sao đối số này áp dụng cho XAML, nhưng không áp dụng cho ngôn ngữ lập trình? "<While Condition="a == true"><Print>Hi!</Print></While>"bất kỳ ai? Đó rõ ràng là tàn bạo; Tại sao bạn nghĩ đại diện UI là khác nhau?
Roman Starkov

@romkyns - Tôi không tranh luận về XAML, câu hỏi hỏi liệu có bất kỳ lợi ích nào không (giải thích của tôi). Về lý do tại sao tôi nghĩ UI khác biệt - có lẽ bố cục UI đơn giản hơn so với mã tùy ý nên XML ít gây hại hơn so với XC # (cú pháp XML cho C # mà chúng ta phải cầu nguyện không bao giờ tồn tại). Trong thực tế, tôi khá mơ hồ về lợi ích trong thế giới thực của XAML đối với mã .NET với API hợp lý cho mã hóa meta hoặc ngôn ngữ tùy chỉnh với cú pháp được xuất bản. (Không ai trong số đó cho phép MS đặt nhãn dán "điều khiển XML" trên hộp.)
psr

1

XAML được thiết kế để đơn giản đại diện cho một hệ thống phân cấp của các đối tượng và không chỉ cho GUI như XPS và WF. Sử dụng XAML để xây dựng các ứng dụng sẽ giúp bạn cung cấp Ứng dụng Internet phong phú (RIA) cũng như các ứng dụng máy tính để bàn phong phú.

Việc sử dụng XAML làm đại diện khai báo dựa trên văn bản của GUI mang lại cho các công cụ phát triển MS một bước gần hơn với các công nghệ khác được coi là tiêu chuẩn trong ngành như HTML.

Một số tính năng chính của XAML (trên Windows Forms) là:

  1. XAML cho phép vẽ các hình ảnh và biến đổi của Đồ họa vectơ có thể mở rộng (SVG). Một trong những lợi ích của đồ họa vector là chúng có thể mở rộng đến mọi kích thước mà không làm giảm chất lượng, do đó bạn không lo lắng nhiều về độ phân giải của máy tính người dùng.

  2. Nhìn chung, các hình thức Windows phải chịu sự hỗ trợ hạn chế cho việc đặt điều khiển tự động do kích thước lại của cửa sổ và thay đổi trên bề mặt GUI (như khi các điều khiển mới được thêm hoặc xóa). Các điều khiển được định vị theo đặc tả rõ ràng của các giá trị hàng và cột cho mỗi điều khiển thông qua GUI hoặc mã chương trình. Mặc dù XAML cho phép thực hiện hành vi này, nhưng nó giới thiệu một cách dễ dàng hơn để giải quyết vấn đề này bằng cách cung cấp cho anh ta điều khiển Stack Control và điều khiển Wrap Panel.

  3. Trong XAML, bạn có thể xây dựng các điều khiển mới từ các điều khiển hiện có trực tiếp trong XAML bằng cách sử dụng lồng nhau. Bạn có thể lồng một điều khiển hình ảnh trong điều khiển nút cùng với Bảng điều khiển ngăn xếp để tạo một loại nút mới, nghĩa là một nút có hình ảnh. Vì điều khiển này được tạo trong XAML, bạn không cần tạo một dll riêng để sử dụng nó như trường hợp trong các biểu mẫu Windows. Thí dụ:

    <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. Kiểu dáng và mẫu cho phép bạn tùy chỉnh giao diện của các điều khiển ở một số cấp độ tương tự như khả năng của CSS và HTML. Không cần lập trình thủ tục. Một thay đổi có thể được phản ánh trên toàn bộ GUI.

  5. XAML cho phép các kỹ thuật liên kết dữ liệu nâng cao không có sẵn trong các biểu mẫu Windows. Bạn thậm chí có thể liên kết một điều khiển với (các) giá trị dữ liệu của bao phấn.

  6. XAML cung cấp một khung Điều hướng tích hợp mà bạn có thể sử dụng hoặc thay thế bằng các khung khác. Trong thực tế WPF, Silverlight và XAML được thiết kế để tận dụng lợi thế của mẫu MVVM mà bạn không thể đạt được chính xác với Windows Forms.

  7. Với sự ra đời của XAML, mã phía sau các tệp có thể được tách ra thành một bộ khử lớn hơn từ các tệp thiết kế giao diện. Tất nhiên sự phụ thuộc của một số tên vẫn tồn tại. Tuy nhiên, thực tế XAML là ngôn ngữ khai báo dựa trên văn bản tương tự như XML và HTML không yêu cầu trình biên dịch, cho phép các nhà thiết kế giao diện tạo các tệp XAML riêng biệt để sau đó được tích hợp với mã phía sau các tệp. Điều này không giống với trường hợp với các biểu mẫu cửa sổ nơi GUI được kết hợp chặt chẽ như mã thủ tục trong dự án. Các nhà thiết kế sử dụng XAML thậm chí có thể rời Visual Studio và sử dụng công cụ MS Expression Blend để tạo GUI của họ. MS Expression Blend được tạo ra cho các nhà thiết kế hơn là lập trình viên.

  8. XAML cung cấp các kỹ thuật gốc tiên tiến cho hoạt hình và hiển thị video mà không cần các công cụ của bên thứ 3.

  9. XAML được dự định để làm cho sự phát triển của phần mềm và trang web dựa trên Windows gần hơn so với việc sử dụng ASP.NET nad Windows Forms. Silverlight và WPF đều sử dụng XAML (mặc dù có một số khác biệt, nhưng phần lớn trải nghiệm có thể chuyển nhượng được).

  10. SDK cho XAML bao gồm các điều khiển thú vị và nó cho phép bạn, trong số các tính năng khác, hỗ trợ trình bày kiểu trình hướng dẫn / bảng phân cảnh mà không cần sử dụng công cụ của bên thứ 3.


Rõ ràng là bạn đã nỗ lực rất nhiều cho việc này, nhưng bạn đã hiểu nhầm một điểm quan trọng: bạn đang thảo luận về những lợi thế của WPF , chứ không phải XAML . XAML chỉ là một đại diện duy nhất của UI WPF, một giao diện dựa trên XML.
Roman Starkov

@romkyns, cảm ơn bình luận của bạn. Tiêu đề câu hỏi là: "giải thích (các) lợi ích của việc sử dụng cú pháp dựa trên XML (ví dụ XAML) thay vì mã nguồn thông thường (ví dụ WinForms)?" - Không đề cập đến WPF ngay cả trong cơ thể.
NoChance

Điều đó đúng, nhưng câu trả lời của bạn vẫn thảo luận về WPF (nhưng gọi nó là XAML, không chính xác). Bạn có thấy những gì tôi có nghĩa là bây giờ? XAML không cung cấp khung điều hướng tích hợp; WPF nào. Kiểu dáng là một tính năng của WPF, không phải XAML. Vv
La Mã Starkov

@romkyns, cảm ơn đã làm rõ, tôi thấy quan điểm của bạn. Ý kiến ​​của bạn rằng bản thân XAML hoàn toàn độc lập với các tính năng này là mới đối với tôi và tôi nghi ngờ điều đó. Tôi có thể có cơ hội nghiên cứu nó nhiều hơn. Tôi đánh giá cao việc chỉ ra điều này.
NoChance

1

XAML mô tả dữ liệu một cách ngắn gọn, nhưng con người và máy móc có thể hiểu được

Về lý thuyết, mọi ngôn ngữ mới là thứ bạn cần học. Khá nhiều người thích nói nhiều / nhiều ngôn ngữ - vì nó được coi là phong phú ngôn ngữ. Điều này tồn tại và nó liên quan đến ngôn ngữ tự nhiên, nhưng không cần thiết để lập trình ngôn ngữ.

Bản thân tôi đã lập trình bằng khá nhiều ngôn ngữ bao gồm các tệp bó, perl, lua, python, c ++ và c #. Tôi có nhớ tất cả chúng không? Không, tôi có thể chuyển đổi bằng ngôn ngữ khác, nhưng nó cần có thời gian. Bây giờ chỉ cần viết bằng C #, sau đó chuyển sang C ++, bạn có thể dễ dàng kết hợp đó là NULL, null, nil hoặc nullptr tùy thuộc vào ngôn ngữ lập trình và đó là "phương ngữ". (c ++ bình thường, quản lý c ++)

xaml là xml "phương ngữ". Có dễ học không? dựa trên khá nhiều câu hỏi trên các diễn đàn khác tôi sẽ nói không.

Nó có thay thế C # không? Không.

Câu trả lời khá rõ ràng - Tôi thích có một ngôn ngữ lập trình, được thiết kế tốt (C # - vd: phản ánh kiểu dữ liệu), có hiệu quả tốt (như C ++) và có thể viết được script (C # -script, C ++ / cling hoặc thậm chí tốt hơn)

Hiện tại C ++ và C # không đáp ứng đầy đủ nhu cầu của tôi, nhưng xaml là một số định dạng dữ liệu kỳ lạ, mà tôi sẽ không coi là đáng để học (chỉ quấn quanh và che giấu nó khỏi mắt của nhà phát triển)

Cuối cùng, tôi muốn kết hợp lại ngôn ngữ tự nhiên (nói) với ngôn ngữ lập trình (ngôn ngữ được xây dựng giả tạo) thành cùng một ngôn ngữ - để nó có thể được sử dụng để giao tiếp và bởi các lập trình viên - sau này là ngôn ngữ lập trình "kiến trúc" hoặc "mẫu thiết kế" sẽ bắt đầu được ghi lại.

  1. XAML cho phép vẽ các hình ảnh và biến đổi của Đồ họa vectơ có thể mở rộng (SVG).
  2. ...

XAML thực sự giới thiệu một số tính năng cải tiến mới so với winforms, vì vậy, đáng để xem xét sử dụng nó. Nhưng cuối cùng nếu bạn muốn giao diện người dùng của bạn trở nên hoàn toàn năng động - xaml cần được thay thế bằng mã thời gian chạy tương tự.

Cuối cùng, giao diện người dùng nên sử dụng đơn giản - và điều đó có nghĩa là bộ điều khiển tối thiểu, các điều khiển trông giống nhau (hủy, ok, phím tắt, cùng chiều rộng / chiều cao, v.v.) có nghĩa là UI có thể được tạo tự động nhiều hơn hoặc ít hơn.

Btw - có thể nhúng trực tiếp vào mã C # xaml không? Dữ liệu meta, chuỗi, ý kiến?

Đôi khi gọn gàng để lạm dụng hoặc lạm dụng ngôn ngữ theo cách mà không ai tưởng tượng được nó sẽ được sử dụng. Perl làm điều này rất nhiều, nhưng tôi thích cú pháp gọn gàng hơn là mật mã. Nhưng C # so với xaml - tôi sẽ chọn C #.


0

Một lợi ích là XAML có thể được sử dụng trong các ứng dụng khác. Một ví dụ điển hình là XAML có thể được phát triển trong Blend bởi một nhà thiết kế / nghệ sĩ trong khi các phần bên trong (mã phía sau) được mã hóa trong studio hình ảnh.

Tôi tin rằng đó là nỗ lực của Microsoft trong việc đánh dấu UI riêng biệt so với mã phía sau và để UI có thể được mã hóa bởi những người không lập trình bằng cách sử dụng một công cụ như Blend.

Nhưng, nhiều cửa hàng không có Blend nên đối với nhiều người trong chúng ta, nó trông giống như một phát minh lại của bánh xe.

Đây là 8 điểm được mua bởi một người nào đó gần máy khách windows hơn:

8 lợi ích XAML


1
Tác giả của liên kết của bạn so sánh XAML với một ngôn ngữ lập trình mục đích chung khá dài dòng. Có lẽ XAML nhỏ gọn hơn C # hoặc Java. Đó là một điểm chống lại C # và Java, không thực sự là một điểm có lợi cho XAML. Mã Ruby tương đương sẽ nhỏ gọn, với toàn bộ sức mạnh của Ruby nếu cần.
kevin cline

Đó là một lợi ích của công cụ Blend, không phải XAML? Blend có thể tồn tại như một GUI định hướng thiết kế tạo mã phía sau hậu trường?
MarkJ

1
Nó thực sự trông giống như một sự tái phát minh của bánh xe đối với những người trong chúng ta sử dụng Delphi. Nó có DSL đơn giản, độc lập với mã để bố trí biểu mẫu từ đầu (1995) và không có tất cả các hành lý xấu xí, cồng kềnh mà XML mang theo.
Mason Wheeler

@MarkJ - Blend đặc biệt hướng đến các nhà thiết kế, trước đó nó chỉ là kéo / thả trong Visual Studio. Trước WPF, các biểu mẫu cửa sổ đã giới hạn chức năng tích hợp cho hoạt hình và GUI bling. Blend có thể đã tồn tại trước đó, nhưng người thiết kế sẽ cần phải quen thuộc với các tệp mã C # hoặc .net (.cs). XAML bạn có thể đánh dấu là thứ mà một nhà thiết kế đã quen thuộc (HTML, XML, v.v.)
Jon Raynor

Tôi đang đề xuất Blend có thể là một GUI hướng đến nhà thiết kế đã tạo các tệp mã C #. Nhà thiết kế không cần phải quen thuộc với cấu trúc của tệp mã C #, giống như họ không phải hiểu cấu trúc nhị phân bên trong của JPG hoặc PNG để tạo hình ảnh trong Photoshop.
MarkJ

-1

Một điểm tôi không thấy trong rất nhiều câu trả lời là xaml mã hóa cốt lõi của các hiệu trưởng wpf desgin. Phân chia biểu diễn trực quan và logic hình ảnh (trong thực tế, điều này bị giới hạn ở các kích hoạt và như vậy nhưng giả sử không có điều khiển tùy chỉnh, đây thường là tất cả những gì bạn cần) từ logic nghiệp vụ. Điều này cũng kết hợp tốt như những người khác đã lưu ý với một cú pháp rõ ràng để ràng buộc, thuộc tính đính kèm và dữ liệu meta khác có thể dài dòng hơn trong mã C # bình thường.

Trên một ghi chú ý kiến ​​cá nhân hơn, một điều tôi thấy hay về xaml là beter đại diện cho hệ thống phân cấp trực quan của các điều khiển thay vì chỉ tạo mã. Nhìn thoáng qua, thật dễ dàng để thấy một điều khiển có liên quan đến những điều khiển khác như thế nào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.