2011-11-18 7 views
8

基本的な検証だけでなく、関係検証も行うことができるJavaライブラリ/システム/パッケージを探しています。複数の関連するエンティティに基づく検証基準を表現できる必要があります。Javaモデルの検証

ほとんどの検証モデルSpring Validation、JSR303は、特にBeanの属性の検証を対象としています。しかし、我々は豆を横切るものが必要です。

当社の要件は、Javaコードのうち、検証ロジックを外部化しながら、モデルの状態を検証する方法を考え出すことです。

上記の定義では、Beanは単なるPOJOであり、モデルは関連するBeanのコレクションです。たとえば、AccountにAddressesのコレクションがあり、Account.countryOfResidenceがUSAに設定されている場合は、すべてのAddressesに米国の国があることを確認する検証規則が必要です。

ので、アカウントに住所を追加する「運転」中に、検証がAddress.countryがAccount.countryOfResidenceと同じであることを確実にキックオフです。

私たちはDRULESを検討していましたが、利用できる他のオプションがあるかどうかを見たいと思っていました。

進め方についてのご意見はありますか?

+0

あなたの文脈では、モデルとは何か、モデル状態とは何ですか?また、検証とは何ですか?彼らはあなたが求めるものが分かっていれば、人々が答えを出すのを助けるかもしれません。 – CPerkins

+1

なぜあなたは検証のためにJavaを避けたいですか? Javaはこれを行うための最も表現力豊かな言語のようであり、多くのAPIを利用でき、Javaオブジェクトに簡単にアクセスできます。 –

+0

サンプルを提供できますか? – Puce

答えて

1

ない、このプロジェクトがどのようにアクティブにしてください、私はしばらく前にそれを使用し、それはあなたが記述している何をする機能を提供 - を見て、それが役に立つかもしれませんかどうかを確認:

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

もちろん、ジェスもあります。 http://www.jessrules.com/jess/

私はそれについてよく分かりませんが、これを見てみる価値があるかもしれません。 ヴラド:http://www.sapia-oss.org/projects/vlad/

+0

Jessの代替案は、以前はDroolsとして知られていたJBoss Projectです。これらについて私が気に入らないものは、1)XMLです。 2)別々のファイルで定義された検証ルール。 3)検証は別個のXMLファイルで定義されます。 –

0

私は、これはScriptAssert validatorまたはcustom validatorJSR 303に行うことが可能だと思います。

This questionは、独自に作成するための基礎として使用することができ、いくつかのカスタムクロスフィールドのバリデータを持っています。ここ

とは@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; 
} 

これは確かにカスタムバリデータよりもはるかに少ないコードです。


注:検証ツールは、XML形式で作成することもできます。

0

私はこのスペースで利用できるものに失望している - 私は機能の組み合わせ不可能にしたいからでしょう - ケーキを持って、それを食べます。だからこれは何よりも長いコメントでより多くのものです私は、少なくとも答えと考えてください。私はこの質問を「お気に入り」とマークし、他の誰かが私たちに厄介な弾丸を向けてくれることを願っています。しかし、私は家に魔法使いがいないと思う。

一つの可能​​性は、特に、関連するEclipseプラグインを設けた支持体と、OCLです。私はそれを見て、それを拒否しました。なぜなら、それは努力する価値がないと思われたからです。しかし、あなたの走行距離は異なるかもしれません。

BDDのために書かれたツールの1つを活用することもできます(おそらく!!!)。しかし、これらはテストのために書かれたものであり、プロダクションコードではありません。「与えられたシナリオx、私はyが起こることを期待しています。私はのように、のeasyb、jbehave、cuke4dukeのポートをcucumber、特にeasybと言っています。私はjbehaveがあなたにとってJava重すぎると思っています。私は真剣にキュウリを見ていません。

あなたに適したものを見つけたら、戻って自分で答えを書いてください。あなたはこれに7 upvotesと4つのお気に入りを持っていることに注意してください - enquiring minds want to know