2012-01-05 32 views
9

Để sử dụng cho một ứng dụng web dựa trên mvc3 .net, bạn nên giới thiệu khung công tác xác thực nào? Ứng dụng sau mẫu mô hình miền và các mô hình miền POCO nằm trong thư viện lớp riêng biệt?Bạn nên giới thiệu khung công tác xác thực nào cho các dự án .net?

Các loại xác nhận rằng sẽ được yêu cầu sẽ được ... Không Null, Regular Expression dựa vv

+0

Bạn đã tìm thấy bất kỳ ưu điểm/nhược điểm nào so với các khung công tác khác nhau? –

Trả lời

18

tôi sẽ đi với FluentValidation, nó là một dự án mã nguồn mở tuyệt vời

https://github.com/JeremySkinner/FluentValidation

Đó là tốt cho các xác nhận cơ bản và phức tạp hơn

+0

làm thế nào về spring.net? – InfoLearner

+0

@KnowledgeSeeker dường như không cần thiết phức tạp với tôi .. nhưng tôi đã không được sử dụng trong một dự án thực sự để đưa ra một ý kiến ​​hợp lệ về nó. tất cả những gì tôi có thể nói là FluentValidation có vẻ như là một giải pháp tuyệt vời cho các dự án mvc –

+0

Bạn có kinh nghiệm với ứng dụng EntLib Validation Block không? Nếu có, tại sao bạn thích FluentValidation? –

3

Nếu bạn cần danh sách lỗi (và không phải lúc nào cũng có ngoại lệ), thì tôi thích khối Xác thực Thư viện Doanh nghiệp.

Xem bài thuyết trình powerpoint tại địa chỉ: http://msdn.microsoft.com/en-us/library/ff650484.aspx

Bạn có thể dây lên kiểm chứng thực cơ bản nhất đối với đối tượng POCO của bạn. Và rất nhiều quy tắc tiền định sẵn có thể được thiết lập trong tệp .config.

Và bạn có thể viết các quy tắc của riêng mình.

Quy tắc của tôi rất chi tiết. Họ thực hiện 1 xác nhận tại một thời điểm.

Như một ví dụ đơn giản: Tôi sẽ có 2 quy tắc khác nhau để quyết định xem nhân viên có được chia sẻ hay không (dựa trên ngày sinh). Một quy tắc sẽ đảm bảo ngày sinh của nhân viên được chỉ định.
Quy tắc thứ hai sẽ đảm bảo rằng ngày hiện tại trừ ngày sinh đã lớn hơn 18 năm. (hoặc bất kỳ quy tắc nào).

(Bây giờ, giả sử tôi có một loạt các quy tắc được áp dụng). Vì vậy, sau khi chạy quy trình xác thực, tôi lấy lại danh sách tất cả các tình huống (không hợp lệ) trong danh sách. Ví dụ, nếu tôi đã hợp thức hóa một nhân viên, tôi sẽ nhận được một danh sách các thương binh.

"Không cung cấp LastName"

"Không cung cấp FirstName"

"Không cung cấp SSN"

thay vì "cùng một lúc". (thực hiện nó "từng lần một" sẽ có khả năng nhiều lần để cuối cùng tìm ra tính hợp lệ của séc của bạn).

Dưới đây là một số mã mẫu. Giả sử ai đó cố gắng mua sách có ISBN "ABC123456".

Dưới đây là quy tắc tùy chỉnh sẽ kiểm tra xem sách đó có tồn tại hay không (ví dụ: trong cơ sở dữ liệu sản phẩm của bạn). Tôi nghĩ bạn có thể làm theo. Nó sẽ được nối với đối tượng poco Book (.cs). (Không hiển thị "dây lên"). Tôi chỉ cố gắng cung cấp cho bạn một ví dụ nhanh về mức độ khó (hoặc không khó) là tạo ra một quy tắc đơn giản.

Khi không tìm thấy sách (sử dụng isbn) .... thì bạn sẽ thấy phương thức validationResults.AddResult. Đó là cách bạn có nhiều thương binh. Bạn sẽ có quyền truy cập vào bộ sưu tập sau này khi bạn đang kiểm tra truy vấn xác thực.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 

using Microsoft.Practices.EnterpriseLibrary.Validation; 
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators; 


namespace MyCompany.Applications.MyApplication.BusinessLogic.Validation.MyType1Validations 
{ 
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] 
    public class BookExistsValidatorAttribute : ValidatorAttribute 
    { 
     protected override Validator DoCreateValidator(Type targetType) 
     { 
      return new BookExistsValidator("BookExistsValidatorTag"); 
     } 
    } 

    public class BookExistsValidator : Validator<string> 
    { 

     public BookExistsValidator(string tag) : base("BookExistsValidatorMessageTemplate", tag) { } 

     protected override string DefaultMessageTemplate 
     { 
      get { throw new NotImplementedException(); } 
     } 

     protected override void DoValidate(string objectToValidate, object currentTarget, string key, ValidationResults validationResults) 
     { 

      bool bookExists = BookMatchExists(objectToValidate); 

      if (!bookExists) 
      { 
       string msg = string.Format("The Book does not exist. Your ISBN='{0}'", objectToValidate); 
       validationResults.AddResult(new ValidationResult(msg, currentTarget, key, 10001, this)); /* 10001 is just some number I made up */ 

      } 


     } 

     private bool BookMatchExists(string isbn) 
     { 
      bool returnValue = false; 

      IBookCollection coll = MyCompany.Applications.MyApplication.BusinessLogic.CachedControllers.BookController.FindAll(); /* Code not shown, but this would hit the db and return poco objects of books*/ 

      IBook foundBook = (from item in coll where item.ISBN.Equals(book, StringComparison.OrdinalIgnoreCase) select item).SingleOrDefault(); 

      if (null != foundBook) 
      { 
       returnValue = true; 
      } 
      return returnValue; 
     } 



    } 
} 
+0

bạn đã sử dụng khung công tác xác nhận Spring.net chưa? – InfoLearner

+1

Không. Tôi bắt đầu với EnterpriseLibrary và tìm ra tôi có thể có được những gì tôi cần trong khoảng 2 ngày. Xem: http://stackoverflow.com/questions/3806447/spring-net-vs-enterprise-library và http://stackoverflow.com/questions/751700/which-validation-framework-to-choose-spring-validation- hoặc xác nhận-applicatio để có thêm ý kiến ​​về cả hai. Thư viện doanh nghiệp luôn có sự hỗ trợ và tài liệu tốt, vì vậy tôi đã bị mắc kẹt với nó qua nhiều năm. Tôi đã sử dụng E.L.Data, vì vậy việc sử dụng khối Xác thực là một sự chuyển đổi dễ dàng cho tôi. – granadaCoder

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