Mẫu thiết kế MVC được cho là dẫn đến việc tách các quy tắc kinh doanh khỏi trình bày.
Nhưng đôi khi quy tắc kinh doanh trình bày AFFECT. Cách tốt nhất để đối phó với điều này là gì? Có phải đó là khi sử dụng ViewModel?
Ví dụ, quay trở lại ứng dụng Thư viện không tồn tại của tôi, một thủ thư đang quét sách trả lại. Hệ thống chỉ ra rằng một cuốn sách bị trễ và áp dụng mức phạt đối với người bảo trợ đó.
Một số nhân viên có thể có bảo mật để ghi đè mức phạt đó dựa trên các điều kiện nhất định.
Lớp trình bày trong ứng dụng thư viện của tôi sẽ cần cho phép nhân viên đặt mức phạt thành 0 hoặc nhấp vào nút để ghi đè mức phạt.
Nhưng những nhân viên KHÔNG có bảo mật để làm điều này sẽ xem phí là đầu vào bị vô hiệu hóa hoặc có thể chỉ đọc.
Lưu ý rằng bảo mật có thể không phải là quy tắc kinh doanh duy nhất . Đây chỉ là một ví dụ. Ví dụ: ứng dụng của tôi có thể có thông tin cấu hình được thiết lập ở đâu đó khiến một trường trên màn hình trở nên không cần thiết, v.v.
Mặc dù mã có thể cho phép bất cứ ai thay đổi mức phạt và sau đó hiển thị thông báo xác thực, nhưng đó không phải là trải nghiệm người dùng tốt.
Một thực hành tốt để thực hiện điều này là gì? Các tùy chọn tôi có thể nghĩ đến (sử dụng ASP.NET MVC) là:
Có chế độ xem tự kiểm tra quy tắc kinh doanh và vô hiệu hóa hoặc kích hoạt trường.
Sử dụng hàm HTMLHelper thực hiện bản trình bày cho trường tốt và để chức năng trợ giúp đó kiểm tra quy tắc kinh doanh.
Có bộ điều khiển kiểm tra quy tắc kinh doanh và sử dụng một chế độ xem khác.
Yêu cầu bộ điều khiển kiểm tra quy tắc kinh doanh và đặt thuộc tính trong ViewBag cho biết trường có được bật hay không.
Sử dụng ViewModel kiểm tra quy tắc kinh doanh và đặt thông tin cho biết trường được bật.
Tùy chọn 1 & 2 khiến lớp trình bày phải thực hiện xác thực quy tắc kinh doanh và điều đó làm rối loạn mọi thứ.
Tùy chọn 3 sẽ gây ra sự trùng lặp nỗ lực trong đó bây giờ bạn có hai chế độ xem được xác định.
Tùy chọn 4 & 5 yêu cầu lớp trình bày để biết rằng trường COULD được bật hoặc tắt, nhưng không phải TẠI SAO. Tôi nghĩ rằng tôi thích 4 hoặc 5 tốt nhất.
Có những lựa chọn khác mà chúng tôi không nghĩ tới?