2009-04-01 44 views
10

Tôi thích mẫu MVVM, một khi bạn bắt đầu sử dụng nó, bạn sẽ bị nghiện nó.WPF MVVM Sử dụng lệnh và xử lý sự kiện

Tôi biết rằng trong thế giới hoàn hảo, mã View của bạn gần như trống (có thể một số mã trong hàm dựng) và mọi khía cạnh của Chế độ xem đang được thao tác từ ViewModel.

Nhưng có những lúc khi tạo trường mới, thuộc tính, lệnh trong ViewModel tạo nhiều mã hơn so với thực hiện cùng một điều trong trình xử lý sự kiện.

Tại thời điểm tôi dính vào nguyên tắc sau:

Nếu mã xử lý sự kiện thao tác phần rất nhỏ của nó xem (đối với nút ví dụ xử lý sự kiện nhấp chuột tăng phông chữ của một số TextBlock đó là nằm trên quan điểm tương tự) thì đó là OK để thực hiện logic bên trong trình xử lý sự kiện. Nhưng nếu View cần thao tác logic nghiệp vụ hoặc truy cập tài nguyên bên ngoài khung nhìn, thì tôi gán các trách nhiệm này cho ViewModel.

Bạn nghĩ gì về cách tiếp cận của tôi?

Bạn cố gắng tránh điều gì khi sử dụng trình xử lý sự kiện và ViewModel?

Bạn có thể giới thiệu phương pháp hay nhất nào khi sử dụng mẫu MVVM?

Trả lời

14

Tôi muốn nói quy tắc chung của bạn không tệ.

Theo quan điểm của tôi, mối quan tâm cốt lõi là "là chế độ xem mã cụ thể hay nó giải quyết logic nghiệp vụ?".

Bạn có thể có mã trong chế độ xem, nếu mã đó đúng ở đây để sửa đổi chế độ xem và không thực hiện bất kỳ loại logic nghiệp vụ nào. Ví dụ của bạn về việc thay đổi kích thước phông chữ là một ví dụ điển hình của mã hoàn toàn tốt trong một khung nhìn (và sẽ làm tăng tiếng ồn trong một ViewModel, làm cho nó khó hiểu và duy trì). Về bản chất, bạn đã làm một số điều đó nếu bạn sử dụng các bộ kích hoạt, do đó, nó không phải là lạ.

Hãy nhớ rằng, nếu bạn sử dụng các bài kiểm tra đơn vị, sẽ rất khó để kiểm tra bit bit của khung nhìn đó. Nếu bạn cần nó thử nghiệm, bạn có thể tốt hơn off đặt nó trong viewmodel.

2

Tôi nghĩ rằng tôi có thể thêm điều để bình luận trước đó là tốt,

Thay vì sử dụng bộ xử lý sự kiện, từ kinh nghiệm rất khiêm tốn, lệnh cho tôi linh hoạt hơn theo nghĩa là nó cung cấp một cơ chế độc lập để đáp ứng các sự kiện/hành động từ các điều khiển khác nhau với khả năng kiểm tra trạng thái của lệnh đó.

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