2011-10-21 15 views
5

Tôi đã hỏi câu hỏi này của một vài đồng nghiệp mà tôi tin rằng có ý nghĩa thiết kế tốt. Thật thú vị, tôi đã nhận được phản hồi khác nhau. Vì vậy, tùy chọn nào bạn nghĩ phù hợp nhất với mô hình MVVM và tại sao?Tôi nên kích hoạt cảnh báo từ ViewModel như thế nào?

Giả sử tôi có yêu cầu hiển thị biểu tượng cảnh báo khi lớn hơn $ 10k.

  • Lựa chọn 1: VM có tài sản "Số tiền", XAML kích hoạt và/hoặc bộ ràng buộc tầm nhìn yếu tố
  • Phương án 2: VM có tài sản "ShowAlert", XAML liên kết với tầm nhìn sử dụng một bool để chuyển đổi tầm nhìn
  • Lựa chọn 3: VM đã sở hữu "AlertVisibility", XAML liên kết trực tiếp
  • tùy chọn 4: khác (xin giải thích)

Cảm ơn đã phản hồi!

+0

+1 cho n ° 2, nhưng với nhãn định hướng kinh doanh hơn như 'AmountHasReachedThreshold' hơn cảnh báo, có nhiều giao diện người dùng liên quan –

+0

Tôi thích tùy chọn 1 và tùy chọn 2. Nhưng tôi nghĩ tùy chọn 3 tiết lộ quá nhiều việc triển khai – Melursus

+0

Xem tôi đã làm gì? – Will

Trả lời

4

Trong trường hợp của bạn, bạn có quy tắc kinh doanh nhất định Shown WHEN > 10k, nó phải được đóng gói trong ViewModel thay vì Xem vì Chế độ xem nhận biết được dữ liệu CÁCH sẽ được hiển thị thay vì WHEN và WHY.

Vì vậy, tôi sẽ đề nghị lộ cả AmountShowAlert tài sản và tránh phơi bày AlertVisibility tài sản bởi vì nó phân tán WPF như Xem điều cụ thể như Visibility bang enum (Hidden, sụp đổ, ...)

Nếu bạn muốn để lộ AlertVisibility bạn có thể gặp phải vấn đề sau trong tương lai - chỉ cần tưởng tượng rằng các phiên bản WPF mới hơn đã loại bỏ sự phiền phức Visibility enum và trong trường hợp này bạn phải sửa đổi ViewModel để hiển thị cơ sở hạ tầng Visibility/tài sản mới. không chính xác từ quan điểm MVVM khi một hành vi Xem được đóng gói trong ViewModel. Vì vậy, Keep it Simple và phơi bày đơn giản bool AlertVisible thuộc tính.

EDIT: Về đặt tên gợi ý trong các bình luận

Hoàn toàn đồng ý! Tôi khuyên bạn nên đổi tên AmountVisible thành IsAmountSpecified hoặc điều gì đó tương tự.

+1

Tôi sẽ không gọi thuộc tính ShowAlert, tôi sẽ gọi nó là AmountOverThreshold. ShowAlert có mùi giống như Xem logic. – cadrell0

+0

+1 cho câu trả lời hay, nhưng tôi đồng ý với @ cadrell0. Gọi nó là 'ShowAlert' âm thanh quá nhiều như bạn đang đặt logic cụ thể xem trong ViewModel của bạn. Tôi muốn gọi nó là 'IsValid' vì ViewModel không quan tâm đến cách người dùng thấy giá trị không hợp lệ, nó chỉ biết giá trị không hợp lệ. Tùy thuộc vào Chế độ xem để tìm hiểu cách hiển thị các giá trị không hợp lệ.(Nếu giá trị có thể không hợp lệ do các lý do khác, chẳng hạn như văn bản trong trường số và điều này chỉ đơn giản là quy tắc kinh doanh đặc biệt, thì tôi có thể sử dụng một cái gì đó như 'IsThresholdExceeded' hoặc một số tên boolean khác có ý nghĩa) – Rachel

+1

I nghĩ rằng nó phụ thuộc nếu đây là một quy tắc kinh doanh sao cho bạn sẽ sử dụng nó ở nơi khác HOẶC nếu đó là phản ứng xem với một giá trị. Nếu nó chỉ là một phản ứng, thì tôi sẽ làm như sau. Nhưng nếu bạn sẽ cần nó ở đâu, sau đó nó thuộc về VM như đề nghị của SLL và được đặt tên như Cadrell0 – SQLMason

0

Tôi sẽ có hiển thị biểu tượng cảnh báo của chế độ xem bị ràng buộc Giá trị số tiền thông qua trình chuyển đổi có tham số là 10000. Trình biến đổi sẽ trả về hiển thị hoặc thu gọn.

Bạn cũng có thể yêu cầu máy ảo gửi tin nhắn khi vượt ngưỡng và bất kỳ chế độ xem hoặc chế độ xem khác nào quan tâm để lắng nghe nó có thể phản ứng với thông báo.

+0

khác, bạn sẽ có chế độ xem logic trong máy ảo của mình – SQLMason

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