MVVM - Trách nhiệm
Mẫu MVVM bao gồm ba phần - Model, View và ViewModel. Hầu hết các nhà phát triển khi mới bắt đầu đều hơi bối rối về những gì Model, View và ViewModel nên hoặc không nên chứa và trách nhiệm của từng phần là gì.
Trong chương này, chúng ta sẽ tìm hiểu trách nhiệm của từng phần của mẫu MVVM để bạn có thể hiểu rõ ràng loại mã nào sẽ đi đến đâu. MVVM thực sự là một kiến trúc phân lớp cho phía máy khách như thể hiện trong hình sau.
Lớp trình bày bao gồm các khung nhìn.
Lớp logic là các mô hình khung nhìn.
Lớp trình bày là sự kết hợp của các đối tượng mô hình.
Các dịch vụ khách hàng tạo ra và duy trì chúng hoặc truy cập trực tiếp trong một ứng dụng hai tầng hoặc thông qua các cuộc gọi dịch vụ đến rồi đến ứng dụng của bạn.
Các dịch vụ khách hàng không chính thức là một phần của mẫu MVVM nhưng nó thường được sử dụng với MVVM để đạt được sự phân tách sâu hơn và tránh mã trùng lặp.
Trách nhiệm của người mẫu
Nói chung, mô hình là mô hình đơn giản nhất để hiểu. Đây là mô hình dữ liệu phía máy khách hỗ trợ các khung nhìn trong ứng dụng.
Nó bao gồm các đối tượng có thuộc tính và một số biến để chứa dữ liệu trong bộ nhớ.
Một số thuộc tính đó có thể tham chiếu đến các đối tượng mô hình khác và tạo ra biểu đồ đối tượng mà tổng thể là các đối tượng mô hình.
Đối tượng mô hình nên nâng cao thông báo thay đổi thuộc tính mà trong WPF có nghĩa là liên kết dữ liệu.
Trách nhiệm cuối cùng là xác thực là tùy chọn, nhưng bạn có thể nhúng thông tin xác thực vào các đối tượng mô hình bằng cách sử dụng các tính năng xác thực liên kết dữ liệu WPF thông qua các giao diện như INotifyDataErrorInfo / IDataErrorInfo
Xem trách nhiệm
Mục đích và trách nhiệm chính của khung nhìn là xác định cấu trúc của những gì người dùng nhìn thấy trên màn hình. Cấu trúc có thể chứa các phần tĩnh và phần động.
Phần tĩnh là cấu trúc phân cấp XAML xác định các điều khiển và cách bố trí các điều khiển mà một dạng xem bao gồm.
Phần động giống như hoạt ảnh hoặc thay đổi trạng thái được xác định là một phần của Chế độ xem.
Mục tiêu chính của MVVM là không có mã phía sau trong chế độ xem.
Không thể có mã phía sau trong chế độ xem. Theo quan điểm, bạn cần ít nhất hàm tạo và một lệnh gọi để khởi tạo thành phần.
Ý tưởng là mã logic xử lý sự kiện, hành động và thao tác dữ liệu không nên nằm trong mã phía sau trong View.
Ngoài ra còn có các loại mã khác phải đi trong mã đằng sau bất kỳ mã nào bắt buộc phải có tham chiếu đến phần tử giao diện người dùng vốn là mã chế độ xem.
Trách nhiệm của ViewModel
ViewModel là điểm chính của ứng dụng MVVM. Trách nhiệm chính của ViewModel là cung cấp dữ liệu cho chế độ xem, để chế độ xem đó có thể đưa dữ liệu đó lên màn hình.
Nó cũng cho phép người dùng tương tác với dữ liệu và thay đổi dữ liệu.
Trách nhiệm chính khác của ViewModel là đóng gói logic tương tác cho một khung nhìn, nhưng điều đó không có nghĩa là tất cả logic của ứng dụng phải đi vào ViewModel.
Nó sẽ có thể xử lý trình tự thích hợp của các cuộc gọi để thực hiện điều đúng đắn dựa trên người dùng hoặc bất kỳ thay đổi nào trên chế độ xem.
ViewModel cũng nên quản lý bất kỳ logic điều hướng nào như quyết định thời điểm điều hướng đến một chế độ xem khác.