Nhìn nhận lại, việc dựa trên XAML trên XML là một sai lầm hay một cách tiếp cận tốt?


16

XAML về cơ bản là một tập hợp con của XML. Một trong những lợi ích chính của việc dựa trên XAML trên XML được cho là nó có thể được phân tích cú pháp bằng các công cụ hiện có. Và nó có thể, ở một mức độ lớn, mặc dù các giá trị thuộc tính (cú pháp không tầm thường) sẽ ở dạng văn bản và yêu cầu phân tích cú pháp thêm.

Có hai lựa chọn thay thế chính để mô tả GUI bằng ngôn ngữ có nguồn gốc XML. Một là làm những gì WinForms đã làm và mô tả nó bằng mã thực. Có rất nhiều vấn đề với điều này, mặc dù nó không hoàn toàn không có lợi thế (một câu hỏi để so sánh XAML với phương pháp này ). Thay thế chính khác là thiết kế một cú pháp hoàn toàn mới được thiết kế riêng cho nhiệm vụ trong tay. Điều này thường được gọi là một ngôn ngữ cụ thể miền .

Vì vậy, nhìn nhận lại và như một bài học cho các thế hệ tương lai, liệu có nên dựa trên XAML trên XML hay không, liệu nó có tốt hơn như một ngôn ngữ dành riêng cho miền được thiết kế tùy chỉnh không? Nếu chúng ta đang thiết kế một khung UI tốt hơn nữa, chúng ta nên chọn XML hoặc DSL tùy chỉnh?

Vì việc suy nghĩ tích cực về hiện trạng dễ dàng hơn nhiều, đặc biệt là một cộng đồng khá được cộng đồng yêu thích, tôi sẽ đưa ra một số lý do ví dụ về lý do tại sao xây dựng trên XML có thể bị coi là một sai lầm.

Căn cứ một ngôn ngữ tắt XML có một điều sẽ cho nó: nó dễ dàng hơn để phân tích cú pháp (phân tích cú pháp cốt lõi đã có sẵn), đòi hỏi nhiều, nhiều công việc thiết kế ít hơn, và phân tích cú pháp thay thế cũng dễ dàng hơn nhiều để viết cho các nhà phát triển bên thứ 3.

Nhưng ngôn ngữ kết quả có thể không thỏa mãn theo nhiều cách khác nhau. Nó khá dài dòng. Nếu bạn thay đổi loại của một cái gì đó, bạn cần thay đổi nó trong thẻ đóng. Nó có hỗ trợ rất kém cho ý kiến; không thể bình luận một thuộc tính. Có những hạn chế được đặt trên nội dung của các thuộc tính theo XML. Các phần mở rộng đánh dấu phải được xây dựng "trên cùng" của cú pháp XML, không được tích hợp sâu và độc đáo vào nó. Và, sở thích cá nhân của tôi, nếu bạn đặt thứ gì đó thông qua một thuộc tính, bạn sử dụng cú pháp hoàn toàn khác so với khi bạn đặt chính xác điều tương tự như một thuộc tính nội dung.

Người ta cũng nói rằng vì mọi người đều biết XML, XAML yêu cầu học ít hơn. Nói đúng ra điều này là đúng, nhưng học cú pháp là một phần rất nhỏ thời gian dành cho việc học một khung UI mới; đó là khái niệm của khung làm cho đường cong dốc. Ngoài ra, các đặc điểm riêng của ngôn ngữ dựa trên XML thực sự có thể thêm vào giỏ "nhu cầu học tập".

Là những bất lợi vượt trội bởi sự dễ dàng của phân tích cú pháp? Khung tuyệt vời tiếp theo có nên tiếp tục truyền thống hay đầu tư thời gian để thiết kế một DSL tuyệt vời không thể được phân tích cú pháp bởi các công cụ hiện có và mọi người cần phải học cú pháp nào?

PS Không phải ai cũng nhầm lẫn XAMLWPF , nhưng một số thì có. XAML là thứ giống như XML. WPF là khuôn khổ với sự hỗ trợ cho các ràng buộc, chủ đề, tăng tốc phần cứng và rất nhiều thứ hay ho khác.


3
Có, nó có thể được phân tích cú pháp bởi trình phân tích cú pháp XML, nhưng không có ý nghĩa / hoàn toàn. Chẳng hạn, nó sử dụng các thuộc tính chuỗi để xác định nguồn dữ liệu và ánh xạ thuộc tính.
Konrad Rudolph

5
Bạn đề xuất gì thay thế? Bất kỳ cuộc thảo luận nào về sự phù hợp của một công nghệ cụ thể sẽ phải giải quyết các công nghệ thay thế phù hợp.
Robert Harvey

2
XAML không phải là không có đối tác, bạn biết đấy. XUL, Glade và QML đều dựa trên cùng một ý tưởng. Tôi nghĩ rằng bạn đang sử dụng XAML không công bằng.
dùng16764

3
Tôi nghĩ rằng lợi ích lớn nhất của XAML không phải là nó có thể được phân tích cú pháp bởi các trình phân tích cú pháp XML. Thay vào đó, XAML tương tự như XML và hầu hết các nhà phát triển đã biết cách làm việc với XML và do đó, đường cong học tập ít dốc hơn nhiều.
Juozas Kontvainis

2
@JuozasKontvainis Nếu bằng "công việc", bạn có nghĩa là "phân tích nó trong công cụ của họ" thì có. Nếu bạn có nghĩa là "viết một giao diện người dùng được mô tả bởi nó" thì cú pháp quen thuộc có thể trông giống như nó giúp, nhưng thực tế, bạn vẫn cần tìm hiểu những gì cần đặt bên trong các thuộc tính (vì đó không phải là XML) và đó là khó nhất điều, theo kinh nghiệm cá nhân của tôi. Học một cú pháp mới, đặc biệt là nếu nó đơn giản và được thiết kế tốt, theo tôi là tầm thường.
Roman Starkov

Câu trả lời:


4

Lý do thuyết phục duy nhất để sử dụng XML là để thiết lập một tiêu chuẩn dữ liệu mở. XAML là ngôn ngữ hiển thị giống nhau được sử dụng trong cả Silverlight và WPF; bất kỳ nhà cung cấp nào cũng có thể sử dụng cùng một tiêu chuẩn đánh dấu để tạo định nghĩa hiển thị cho nền tảng của riêng họ và nó có thể được sử dụng lại trong Silverlight hoặc WPF.

Trong ngành hàng không vũ trụ, chúng tôi có các phòng điều khiển, nhờ những tiến bộ của công nghệ máy tính, giờ đây rất linh hoạt. Trong quá khứ, tất cả các phần cứng là tùy chỉnh, độc đáo và rất đắt tiền; ngày nay, tất cả đều được chạy với các PC rẻ tiền, phổ biến, sẵn có. Điều này làm giảm đáng kể khóa nhà cung cấp. Tuy nhiên, các widget hiển thị vẫn được viết bằng ActiveX, vì đó là cách nó luôn được thực hiện.

ActiveX yêu cầu quyền truy cập vào các công cụ của Microsoft, tốt, lỗi thời. Vì vậy, Không quân và Nhóm Thiết bị đo lường phạm vi sắp ra mắt với Ngôn ngữ đánh dấu hiển thị dữ liệu, dựa trên XML. Điều này sẽ cho phép các học viên thiết kế màn hình bằng cách sử dụng đánh dấu XML, trong trình soạn thảo mà họ chọn. Nghe có vẻ quen?

Không ai tranh luận rằng XML không phải là không có lỗi của nó. Nhưng đó là điều tốt nhất có sẵn cho những gì nó được thiết kế để làm, cho đến khi một cái gì đó tốt hơn xuất hiện.

Xem thêm
Tại sao XML không hút


3
Bạn có đồng ý rằng lý do tương tự cũng áp dụng tốt như nhau cho những điều như, như, mô tả ngữ pháp YACC, TeX, regexes, Verilog và thậm chí có thể là LISP? Chúng tôi đã đưa ra cú pháp đặc biệt cho từng người trong số này. Chúng sẽ có lợi giống như cách bạn liệt kê trong đoạn đầu tiên. Vậy thì không phải việc sử dụng XML cho họ sẽ là điều đúng đắn, bởi vì XML đáp ứng các mục tiêu bạn đã đề cập?
Roman Starkov

Chỉ XML được công nhận rộng rãi là một siêu tiêu chuẩn dữ liệu phổ quát, từ đó bạn có thể tạo nhiều tiêu chuẩn dữ liệu riêng lẻ như bạn muốn. Để tránh làm vấy bẩn vùng biển, tôi đã loại bỏ đoạn đầu tiên.
Robert Harvey

Biểu thức S không bao giờ được coi là một tiêu chuẩn siêu dữ liệu, có thể vì không ai thích tất cả các dấu ngoặc đơn ngớ ngẩn đó. Ubiquity là yếu tố hấp dẫn ở đây; tất cả các cú pháp thay thế mà bạn đã đề cập có thể được trình bày bằng XML, nếu bạn quá nghiêng.
Robert Harvey

2
Tất cả chúng cũng có thể được biểu diễn trong YAML và JSON (và ngược lại).
Timwi

2
Một vấn đề lớn mà tôi thấy trong suốt cuộc tranh luận này là XAML không thực sự là dữ liệu. Chắc chắn, nó chỉ có thể được coi là một biểu đồ đối tượng, nhưng kiểu suy nghĩ này có lẽ là lý do tại sao nhiều người không thích nó và tại sao nó có một đường cong học tập như vậy. "Này, chúng ta hãy tạo một biểu đồ đối tượng, ý tôi là giao diện người dùng". Tôi không biết làm thế nào nó có thể được làm tốt hơn, nhưng tôi tự tin nó có thể.
Earlz

2

Sự phản đối của bạn đối với XML không liên quan gì đến việc sử dụng nó làm ngôn ngữ mô tả GUI; tất cả chúng đều là những khiếu nại về việc làm việc với cú pháp XML áp dụng như nhau cho bất kỳ dạng XML nào.

Vì vậy, có vẻ như bạn không thích XML.

Bạn nói đúng, nó có thể không phải là lựa chọn tối ưu để chỉnh sửa bằng tay, nhưng đối với ngôn ngữ mô tả GUI tôi sẽ đưa ra một số đối số:

  1. (IMHO,) GUI là đồ họa và nên được đặt ra bằng đồ họa. Định dạng tệp không thực sự quan trọng, vì bạn thực sự không nên chỉnh sửa bằng tay. (Dựa trên văn bản là tốt cho mục đích kiểm soát nguồn, nhưng tính dài dòng không phải là vấn đề.)

  2. Bên cạnh trình phân tích cú pháp có sẵn, XML cũng dễ dàng xác thực: bạn có thể viết Lược đồ DTD hoặc XML và sau đó sử dụng các công cụ chung để cho bạn biết nếu tệp của bạn hợp pháp. Điều này sẽ rất hữu ích cho một ngôn ngữ mô tả GUI. Làm tương tự trong JSON hoặc YAML không đơn giản.

  3. Nếu bạn thực sự không hài lòng với việc viết XAML trực tiếp, không có gì ngăn cản bạn phát triển một định dạng mới và sau đó biên dịch nó thành XAML. Ví dụ: bạn có thể đưa ra ánh xạ đơn giản từ JSON sang XAML, do đó bạn có thể có cú pháp nhẹ hơn của JSON (và khả năng nhận xét các thuộc tính), sau đó tạo XAML khi bạn xây dựng ứng dụng của mình. Mọi người hiếm khi viết HTML trực tiếp nữa, nhưng HTML vẫn là một định dạng tuyệt vời.


1
Tôi thích XML; Tôi chỉ không thích viết nó bằng tay. 1. Vâng, họ nên làm vậy, nhưng thực tế là Visual Studio không thể thực sự làm được điều đó. 3. Đây là trực giao cho cuộc thảo luận về việc liệu XAML, trong nhận thức muộn, là một ý tưởng tồi. Vâng, người ta có thể, nhưng tại sao người ta lại cần nếu XAML không phải là một lựa chọn tồi?
Roman Starkov

1
Quan điểm của tôi là bạn đang đánh giá nó hoàn toàn trái với các tiêu chí viết nó; mối quan tâm của bạn phải được cân bằng chống lại việc xác nhận và giải thích nó quá. Một DSL đẹp hơn để viết gần như chắc chắn sẽ khó phân tích hơn. Nhưng một bước biên dịch trung gian có thể cung cấp cho bạn tốt nhất của cả hai thế giới.
benzado

0

Câu hỏi này mang tính chủ quan, vì vậy tôi nghĩ thật công bằng khi đăng câu trả lời dựa trên sở thích cá nhân của tôi.

XML rất khó đọc. Ví dụ: mở liên kết này và nhấp vào "Mẫu" để so sánh XML và YAML cạnh nhau. Cái sau rõ ràng là dễ đọc hơn nhiều.

Nếu bạn muốn sử dụng XML để mô tả GUI, thì tốt hơn hết là bạn nên chắc chắn rằng bạn cung cấp đủ công cụ để con người không phải nhìn vào XML.

Rõ ràng XPF đã thất bại trong vấn đề đó.

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.