2010-03-02 34 views
7

Xác thực đối tượng nghiệp vụ là một vấn đề phổ biến, nhưng có một số giải pháp để giải quyết vấn đề đó.Các đối tượng hoặc thực thể kinh doanh có nên tự xác thực không?

Một trong những giải pháp này là sử dụng khung công tác độc lập NHibernate.Validator, một khung công tác xác thực dựa trên thuộc tính.

Nhưng tôi đang đối mặt với mối quan tâm về khái niệm. Các trình xác nhận thuộc tính như NH.Validator rất tuyệt vời nhưng việc xác thực chỉ được thực hiện khi lưu-cập-xóa trong phiên.

Vì vậy, tôi tự hỏi nếu các đối tượng kinh doanh không nên tự xác thực để duy trì tính toàn vẹn và nhất quán của riêng mình?

Trả lời

10

IMHO - có 2 bước vụ việc phê chuẩn cần thiết cho một đối tượng kinh doanh (BO)/Entity có giá trị:

Bước 1: BO/Entity tự xác nhận - Trong bài này, chúng tôi kiểm tra chỉ khi thực thể là hợp lệ về trạng thái của nó F.Ex .: Nếu mã bưu chính được thiết lập, sau đó nó có ký tự hợp lệ & có độ dài hợp lệ, vv tạo thành các xác thực cấp BO/Thực thể. Nhưng ngoài mức xác nhận này, chúng tôi không thể nói rằng BO/Entity hợp lệ trong miền và/hoặc kho lưu trữ của doanh nghiệp của bạn. Thông thường, BO/Entity sẽ có thể thực thi mức xác nhận này.

Bước 2: Bối cảnh xác nhận - Trong bài này, chúng ta cần phải xác nhận nếu BO/Entity có giá trị trong bối cảnh của Repository nơi nó đang được tồn. F.Ex .: Mã bưu điện có hợp lệ cho quốc gia mà đơn hàng đang được đặt/gửi đến ... Để xác thực này, một số hoặc tất cả các thực thể trong bối cảnh hiện tại có thể cần phải tham gia để đảm bảo BO/Entity hợp lệ.

Vì vậy, để giữ cho các thực thể trong sạch, bạn sẽ cần phải chia xác thực thành 2 bước này - một thực hiện bởi chính tổ chức đó & thứ hai theo kho lưu trữ/làm việc với thực thể.

HTH.

+0

Việc tách hai bước này là một bước thú vị. Trong khi tôi không bao giờ thực sự nghĩ về nó theo cách này, tôi một phần sử dụng cách tiếp cận này mà không biết. Tuy nhiên, tôi cũng cố gắng tách biệt việc tự xác nhận từ các thực thể. Tôi giải thích làm thế nào tôi đã làm điều này với khối ứng dụng xác nhận ở đây: http://stackoverflow.com/questions/2258513/validation-framework-in-net-that-can-do-edits-between-fields/2259062#2259062. – Steven

6

Không phải lúc nào họ cũng có thể tự xác thực. Điều gì sẽ xảy ra nếu bạn nhập Mã Zip "không hợp lệ"? Bạn có thể xác nhận rằng Mã Zip cần phải ở định dạng cụ thể, nhưng nếu bạn muốn chúng là "hợp lệ", đó là "hiện tại và phù hợp với thành phố"? Hoặc nếu bạn chỉ chấp nhận số điện thoại từ các mã vùng nhất định và danh sách mã hợp lệ nằm trong cơ sở dữ liệu được bộ phận pháp lý duy trì?

Nếu bạn có thể thực hiện xác thực ngữ nghĩa, điều đó thật tuyệt và có thể đi vào Lớp học kinh doanh. Nhưng thông thường, bạn có thể cần xác nhận thêm mà đơn giản là không thể xử lý bởi chính lớp nghiệp vụ nhưng cần phải được xử lý bởi lớp nói chuyện với cơ sở dữ liệu và các dịch vụ bên ngoài khác.

+0

+1 Bạn đã đúng. Trong lời giải thích của tôi, tôi nói về các xác nhận có thể tự kiểm tra bởi các thực thể. – Javier

+2

Tôi đồng ý. Tôi muốn giữ logic xác thực của mình riêng biệt với các thực thể nghiệp vụ. – Steven

2

Tôi không biết nếu chúng ta đang nói về cùng một ý tưởng, nhưng nếu chúng tôi, tôi thích những gì bạn giải thích. Rất nhanh, tôi sẽ giải thích những gì tôi làm để giải quyết vấn đề này. Trong trường hợp của tôi, tất cả các đối tượng bussines trong lớp miền của tôi phải ghi đè lên hai phương thức:

Rõ ràng, để duy trì điều này, tôi có nhiều lớp hơn, nhưng tôi không viết tất cả ở đây, cos Tôi chỉ đang cố giải thích khái niệm

List<ValidationRule> notPassedValidationRules = new List<ValidationRule>(); 

//... 

public override void ValidateErrorsWhenSaving(Validator validator) 
{ 
    //... 
} 

public override void ValidateErrorsWhenDelete(Validator validator) 
{ 
    //... 
}   

Trong các phương pháp này, tôi kiểm tra một số điều kiện boolean, tập hợp một quy tắc không được truyền. Trong trường hợp của tôi, các phương thức này được gọi trước khi Unit Of Work cam kết các thay đổi (chèn các thực thể mới, cập nhật, xóa) và hiển thị các lỗi có thể xảy ra cho người dùng trước khi commit.

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