2009-10-05 34 views
9

Model-View-ViewModel rất phổ biến với WPF và Silverlight. Tôi đã sử dụng điều này cho các dự án gần đây nhất của tôi và là một người hâm mộ rất lớn.Điều gì khiến MVVM trở nên phù hợp với WPF?

Tôi hiểu rằng đó là sàng lọc MVP. Tuy nhiên, tôi tự hỏi chính xác những đặc điểm độc đáo của WPF (và Silverlight) cho phép MVVM hoạt động, và ngăn chặn (hoặc ít nhất là làm cho khó khăn) mô hình này làm việc bằng cách sử dụng các khung công nghệ khác.

Tôi biết MVVM có sự phụ thuộc mạnh mẽ vào công nghệ ràng buộc dữ liệu mạnh mẽ trong WPF. Đây là một trong những tính năng mà nhiều bài viết và blog dường như đề cập đến như là chìa khóa để WPF cung cấp các phương tiện phân chia mạnh mẽ của View từ ViewModel. Tuy nhiên, ràng buộc dữ liệu tồn tại trong many forms trong các khung giao diện người dùng khác. Thậm chí còn có các dự án như Truss cung cấp dữ liệu kiểu WPF cho POCO trong .NET.

Tính năng nào khác ngoài ràng buộc dữ liệu, làm cho WPF và Silverlight duy nhất phù hợp với Model-View-ViewModel?

Trả lời

7

DataBinding, lệnh, mẫu điều khiển và XAML.

Không có một trong số này, MVVM sẽ khó hơn rất nhiều, nếu không phải là không thể. Lấy ASP.net ví dụ, nó có phần ASPX (vì lợi ích của ví dụ tương đương với XAML), nó có ràng buộc dữ liệu, nhưng nó không có các lệnh hoặc các mẫu điều khiển, do đó MVVM không thể thực hiện được ở đó. Trong WinForms, chúng tôi có databinding, và đó là khá nhiều nó, vì vậy không thể hoặc.

+0

Tại sao bạn cảm thấy XAML là bắt buộc đối với MVVM? –

+0

Vì 2 lý do, DataBinding (trong MVVM được thực hiện thông qua XAML) và ControlTemplates. Nếu không có sau này, việc chỉnh sửa/tạo điều khiển của chính chúng ta sẽ bị ràng buộc mã, làm cho MVVM trở nên khó khăn hơn khi làm việc với các điều khiển do người dùng tạo ra. – Carlo

+0

Databinding không cần phải được thực hiện thông qua XAML, và có một số người thích chia nó ra khỏi XAML. Trong khi tạo giao diện người dùng mã khó hơn XAML, điều đó là có thể và không ảnh hưởng đến việc sử dụng MVVM. Và tôi nghĩ rằng các mẫu dữ liệu có liên quan nhiều hơn đến MVVM so với mẫu kiểm soát. –

1

Tôi nghĩ hỗ trợ chỉ huy (ICommand) ngoài khả năng ràng buộc dữ liệu tuyệt vời làm cho nó phù hợp với WPF và Silverlight.

2

Tóm lại: đó là ràng buộc dữ liệu.

mỗi sự Data Binding Overview from MSDN:

Nếu ràng buộc có cài đặt đúng và các dữ liệu cung cấp các thông báo thích hợp, sau đó, khi dữ liệu thay đổi giá trị của nó, các yếu tố đó đang bị ràng buộc để các dữ liệu phản ánh những thay đổi tự động. Ràng buộc dữ liệu cũng có thể có nghĩa là nếu một biểu diễn bên ngoài của dữ liệu trong một phần tử thay đổi, thì dữ liệu cơ bản có thể được cập nhật tự động để phản ánh thay đổi. Ví dụ: nếu người dùng chỉnh sửa giá trị trong phần tử TextBox, giá trị dữ liệu cơ bản sẽ tự động được cập nhật để phản ánh thay đổi đó.

Nếu bạn đặt XAML đúng cách, bạn chỉ phải tương tác với giao diện người dùng của mình bằng chế độ xem. WPF chăm sóc cập nhật giao diện người dùng khi chế độ xem thay đổi và cập nhật chế độ xem khi giao diện người dùng thay đổi (ví dụ: đầu vào của người dùng).

+0

mmm - Tôi không cảm thấy rằng Binding dữ liệu là đủ, trong và của chính nó, mặc dù đây là tính năng chào hàng chính. Những thứ như Truss sẽ cho phép MVVM cho bất kỳ công nghệ .NET nào nếu nó chỉ là về ràng buộc dữ liệu ... (Tôi đồng ý rằng đó là một khối xây dựng quan trọng, không phải chỉ là một khối duy nhất). Tôi đã hy vọng cho các tính năng khác, không phải databinding, rất quan trọng. –

2

Tôi đã triển khai mẫu anh em họ của MVVM Model-View-Presenter trong MFC, WinForms và thậm chí MATLAB. Tôi đồng ý với bài viết gốc: WPF tạo điều kiện ràng buộc dữ liệu rất độc đáo, nhưng bạn có thể sử dụng các khái niệm trong các nền tảng khác (mặc dù có nhiều mã hơn).

Đọc John Grossman's blog, điểm khác biệt thực sự là giao diện người dùng sẽ được viết bằng ngôn ngữ khác với logic nghiệp vụ. Lý tưởng có vẻ là phát triển giao diện người dùng được thực hiện bởi "nhà thiết kế" không phải là lập trình viên.

Đây là khu vực mà WPF là duy nhất - Tôi không biết bất kỳ môi trường phát triển nào khác phù hợp với lý tưởng này.

(Tâm trí bạn, tôi chưa bao giờ làm việc trên một nhóm đủ lớn để đảm bảo các nhà thiết kế giao diện người dùng chuyên dụng.Tôi không thể nói liệu lý tưởng này có thực sự đạt được hay không).

Các vấn đề liên quan