2011-11-18 27 views
8

Chúng tôi đang tìm kiếm một thư viện/hệ thống/gói Java không chỉ xác thực cơ bản mà còn có thể thực hiện xác nhận mối quan hệ. Chúng ta cần có khả năng thể hiện các tiêu chuẩn xác nhận dựa trên nhiều thực thể liên quan.Xác nhận mẫu Java

Hầu hết các mô hình xác nhận Xác nhận mùa xuân, JSR303 được nhắm mục tiêu cụ thể để xác thực các thuộc tính của bean. Nhưng chúng ta cần cái gì đó sẽ đi qua đậu.

Yêu cầu của chúng tôi là đưa ra phương pháp xác thực trạng thái mô hình trong khi ngoài logic xác thực ra khỏi mã java.

Trong định nghĩa trên, Bean chỉ là POJO và mô hình là tập hợp các Đậu liên quan. Vì vậy, ví dụ: nếu Tài khoản có tập hợp Địa chỉ và Account.countryOfResidence được đặt thành Hoa Kỳ, tôi muốn có quy tắc xác thực để đảm bảo rằng tất cả Địa chỉ đều có quốc gia Hoa Kỳ trong đó.

Vì vậy, trong quá trình "hoạt động" thêm Địa chỉ vào Tài khoản, việc xác thực sẽ bắt đầu đảm bảo rằng Address.country giống với Account.countryOfResidence.

Chúng tôi đã xem xét DRULES, nhưng muốn xem liệu có các tùy chọn khác có sẵn hay không.

Bất kỳ đề xuất nào về cách tiến hành?

+0

Trong ngữ cảnh của bạn, mô hình là gì, "trạng thái mô hình" là gì và xác thực là gì? Nó có thể giúp mọi người sản xuất câu trả lời nếu họ biết những gì bạn tìm kiếm. – CPerkins

+1

Tại sao bạn muốn tránh Java để xác thực? Java có vẻ như là ngôn ngữ biểu cảm nhất để làm điều đó, có rất nhiều các API có sẵn và dễ dàng truy cập các đối tượng Java. –

+0

Bạn có thể cung cấp mẫu không? – Puce

Trả lời

1

Không chắc cách thức hoạt động dự án này, nhưng tôi đã sử dụng nó một thời gian trước đây và nó cung cấp khả năng để làm những gì bạn đang mô tả - có một cái nhìn và xem nếu nó có thể hữu ích:

http://i-screen.org/docs/index.html

Và tất nhiên có Jess: http://www.jessrules.com/jess/

Cũng có thể đáng xem xét điều này, mặc dù tôi không biết nhiều về điều này. Vlad: http://www.sapia-oss.org/projects/vlad/

+0

Một thay thế cho Jess là Dự án JBoss trước đây được gọi là Drools. Những gì tôi không thích về chúng là 1) XML; 2) quy tắc xác nhận được xác định trong một tệp riêng; 3) xác nhận hợp lệ được xác định trong một tệp XML riêng biệt. –

0

Tôi nghĩ rằng đây có thể làm trong JSR 303 với ScriptAssert validator hoặc một custom validator.

This question có một số trình xác thực trường chéo tùy chỉnh có thể được sử dụng làm cơ sở để tạo của riêng bạn.

Và đây là một ví dụ về trình xác thực @ScriptAssert.

@ScriptAssert(lang="javascript", script="_this.countryOfResidence.equals(_this.address.country)") 
// @ScriptAssert(lang="jexl", script="_this.countryOfResidence == _this.address.country") 
public class Account { 
    @NotNull @Valid 
    private Address adddress; 

    private String countryOfResidence; 
} 

public class Address { 
    ... 
    @NotNull 
    private String country; 
} 

Đây chắc chắn là mã ít hơn nhiều so với trình xác thực tùy chỉnh.


Lưu ý: trình xác thực cũng có thể được tạo bằng XML (nếu đó là cách bạn cuộn).

0

Tôi thất vọng bởi những gì có sẵn trong không gian này - có lẽ vì tôi muốn có một sự kết hợp không thể có của các tính năng - có bánh và ăn nó. Vì vậy, đây là nhiều hơn bằng cách nhận xét dài hơn những gì Tôi, ít nhất hãy xem xét câu trả lời . Tôi đánh dấu câu hỏi này là "yêu thích", hy vọng một người khác sẽ chỉ cho chúng tôi một viên đạn uy nghi. Nhưng tôi đoán không có pháp sư nào trong nhà.

Một khả năng là OCL, đặc biệt là với sự hỗ trợ được cung cấp kèm theo các plugin Eclipse có liên quan.Tôi đã xem xét nó và từ chối nó bởi vì nó dường như không đáng để nỗ lực - nhưng số dặm của bạn có thể khác nhau.

Một khả năng khác (có thể !!!) là tận dụng các phần của một trong những công cụ đã được viết cho BDD. Tuy nhiên, chúng được viết để thử nghiệm, chứ không phải mã sản xuất - "kịch bản x, tôi mong đợi y xảy ra". Tôi đang đề cập đến những thứ như easyb, jbehave và cổng cuke4duke là cucumber - đặc biệt là easyb. Tôi nghĩ rằng jbehave là quá Java-nặng cho bạn, và tôi đã không nghiêm túc nhìn vào dưa chuột được nêu ra.

Nếu bạn tìm thấy điều gì đó phù hợp với mình, vui lòng quay lại và viết câu trả lời của riêng bạn. Lưu ý rằng bạn có 7 phiếu bầu và 4 mục yêu thích trong số này - enquiring minds want to know!

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