Mỗi khi tôi bắt đầu làm việc trên một ứng dụng web ASP.NET MVC mới, tôi không chắc liệu có sử dụng xác thực DataAnnotations
hay không. Một cái gì đó về nó cảm thấy sai.Chú thích dữ liệu hoặc xác thực thủ công trong các dịch vụ?
Ví dụ: giả sử tôi có một số UserService
được chuyển một số CreateUserModel
từ hành động Create
của AccountController
. Để đảm bảo người dùng luôn cung cấp tên, tôi đặt thuộc tính Name
của mô hình để có thuộc tính [Required]
. Bây giờ tôi đã an toàn trong kiến thức rằng người liên kết mô hình sẽ không bao giờ cho tôi một số CreateUserModel
trừ khi nó có tên.
Vấn đề của tôi là vì thành phần có thể sử dụng lại của hệ thống của tôi, nó không thể dựa vào thực tế lớp trên cung cấp dữ liệu hợp lệ, và chắc chắn cũng phải xác thực dữ liệu này. Sự cần thiết cho điều này được nhấn mạnh hơn nữa khi bạn xem xét rằng bạn có thể muốn viết một dịch vụ web hoàn toàn sử dụng lại UserService
(và sẽ không có chất kết dính mô hình để thực hiện tất cả xác nhận chú thích dữ liệu cho nó).
Vì vậy, câu hỏi của tôi là: Thực tiễn tốt nhất cho tình huống này là gì? Xác nhận với chú thích dữ liệu và lặp lại xác nhận đó trong các dịch vụ? Chỉ xác thực trong các dịch vụ và ném ngoại lệ? Một sự kết hợp của cả hai?
Tôi hy vọng câu hỏi của mình không quá chủ quan, tôi chủ yếu cố gắng thiết lập một sự nhất trí về việc liệu việc chuyển xác thực sang chú thích dữ liệu có dẫn đến kết thúc tôi không.
Đây là những gì chúng tôi làm trừ khi chúng tôi chuyển IValidationDictionary sang lớp sevice được triển khai như trình bao bọc ModelState để lớp dịch vụ có thể thêm lỗi vào ModelState trực tiếp nhưng không phụ thuộc vào ASP.NET MVC. Bộ điều khiển sau đó không cần phải lo lắng về việc quản lý việc thêm các lỗi trả về cho ModelState. –