2010-01-17 19 views
5

Kịch bản chung:Thực hành tốt để tránh trùng lặp logic hợp lệ khi làm việc với cả hai đối tượng miền và xem mô hình trong ASP.NET MVC

Mô hình miền bí mật đang được ánh xạ tới mô hình chế độ xem phẳng cho mục đích trình bày.

Tôi có thiết lập xác thực đầy đủ trong miền của mình và muốn tránh ánh xạ mô hình chế độ xem đối tượng miền chỉ để tìm ra rằng một số thuộc tính không hợp lệ. Tôi cũng không muốn sao chép logic xác thực của mình trong các mô hình chế độ xem của mình.

Một số phương pháp hay ở đây là gì?

Tôi chống lại giao diện cho cả mô hình xem và đối tượng miền, vì mô hình xem thường có dạng chuỗi và bằng phẳng, trong khi đối tượng miền thường được lồng vào nhau và có nhiều loại dữ liệu khác cho thuộc tính.

Tôi đang suy nghĩ về một số trình xác thực có thể cắm được sẽ đủ thông minh để xác thực cả đối tượng miền và dạng xem nhưng có chút nghi ngờ về việc triển khai.

Nhưng để đơn giản, tôi đang hướng đến phương pháp này:

Xác thực phía máy chủ chỉ xảy ra trong mô hình miền; các mô hình xem không được xác thực, nhưng dữ liệu được xác thực trên máy khách bằng JavaScript. Vì vậy, trong hầu hết các trường hợp, các mô hình khung nhìn của tôi sẽ là hợp lệ và logic hợp lệ sẽ ở một nơi và sẽ chỉ xuất hiện trong mô hình miền. Cách tiếp cận này có một nhược điểm là xác thực asp.net mvc 2 sẽ không thể hỗ trợ nó. Bạn nghĩ sao?

Cảm ơn.

Trả lời

1

Thư viện doanh nghiệp của Microsoft cung cấp thư viện 'Xác thực Pluggable' dựa trên generics nếu bộ nhớ phục vụ.

Tôi không thích cách nó hoạt động, chưa kể số phụ thuộc vào các thành phần EL khác nhưng nó vẫn có thể đáng xem.

Tôi không phải là chuyên gia trong lĩnh vực này nhưng tôi tin chắc rằng dữ liệu phải được xác thực ngay trước khi bạn muốn làm điều gì đó với nó và LUÔN LUÔN trước khi cam kết vào kho lưu trữ của bạn. Vì vậy, nơi tốt nhất cho Logic xác nhận của bạn là lớp logic nghiệp vụ của bạn. Xác nhận phía khách hàng, mặc dù vui lòng cho người dùng, làm cho mã duy trì một cơn ác mộng và cũng dẫn đến sao chép mã mà có thể gây ra vấn đề tiếp tục xuống dòng.

Đối tượng trình bày của bạn, theo ý kiến ​​của tôi, là của DTO.Khi người dùng gửi dữ liệu trở lại bộ điều khiển của bạn (và BLL), bạn có thể sử dụng trình phân tích cú pháp để chuyển đổi đối tượng bản trình bày thành đối tượng kinh doanh mà sau đó có thể được xác thực.

Tôi khuyên bạn nên đọc một blog của Rudy Lacovara (hay còn gọi là The Angry .NET Developer). Anh ấy là một người rất khiêm tốn với rất nhiều điều tốt để nói về những thứ như thế này.

HTH

1

There is no validation approach that fits always.

Trong trường hợp của bạn, tôi sẽ sử dụng xác thực mvc2 (với xác thực ứng dụng khách) và quay trở lại xác thực tên miền, nếu xác thực viewmodel vượt qua.

0

Tôi thích ý tưởng về trình xác thực có thể cắm/tiêm. Đây là cách tôi thường đi về xác nhận (không có vấn đề nếu đó là webforms, mvc, wpf, vv ...). Tại sao? Bởi vì các quy tắc xác nhận có xu hướng khác nhau theo từng kịch bản và mỗi tầng ứng dụng. Ví dụ: Mô hình xem của bạn có thể có các quy tắc xác thực nhất định là do bố cục giao diện người dùng thay vì quy tắc miền hoặc cơ sở hạ tầng. Nếu bạn thực hiện các quy tắc và trình xác nhận hợp lệ, bạn có thể sử dụng lại nhiều quy tắc ràng buộc dữ liệu trong mỗi tầng/kịch bản.

Mặc dù tôi cho rằng xác thực Javascript khiến mọi thứ trở nên linh hoạt đối với người dùng, tôi sẽ chỉ sử dụng javascript trong VM.

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