同様に、入力データの処理は、クライアント/サーバーアプリケーションの不可欠な段階の1つです。 このプロセスは、多くの場合、一連のifおよび対応する例外によって記述されます。 多数のパラメーターを使用すると、このようなコードは読みにくくなり、正確性の分析が重要なタスクになります。 そのため、多くの場合、データの前処理のロジックはいくつかのメソッドとクラスによって「広げられ」ます。 さらに、新しいパラメーターが表示されると、そのパラメーターのチェックと正規化(フォーマット、文字のエスケープなど)を忘れがちです。 この問題の解決策として、DSLを使用して宣言スタイルでこれらのルールを記述することができるGroovyライブラリが作成されました。 たとえば、次のスクリプトは、メールアドレス、ログイン、性別、「ルールに同意します」ボックスの状態、重量、日付の6つの受信パラメーターを処理します。
import org.grules.console.Gender // isEmail Java/Groovy , — email. import static. email isEmail ["Invalid email"] // >> — isAlpha isUnique. invalidLoginssage dupLoginssage . login isAlpha [invalidLoginssage] >> isUnique [dupLoginssage] // Gender Java enum. gender , "MALE". Groovy . gender["MALE"] toEnum(Gender) // m ResourceBundle, m.agreeToTerms — . termsCondition[""] !isEmpty [m.agreeToTerms] // o . it. weight toPositiveBigDecimal [decimalErr] >> {round it / 1000} // &&, || !. . endDate isAfterNow && isBefore(deadline) && {it.day != 1}
スクリプトの実行結果は、5つのグループに分けられたパラメーターを持つJavaオブジェクトの形式のレポートです。
- 正す
- 検証されていません
- 入力にない
- 一致する前処理ルールが見つからなかった
- 他のパラメーターに対する依存関係が検出されないか無効である
DSLの場合、検証プロセスはライブラリの制御下にあるため、メタレベルでの操作(たとえば、各パラメーターの統計の収集やクライアント側のJavascriptコードの生成)を実行できます。 Javaでは、アノテーションを介して同様の機能を使用できますが、ASTへのアクセスと非プリミティブデータ型のサポートがないため、その範囲が制限されます。
開発者がDSLの使用を開始するために必要なのは、プロジェクトクラスパスにライブラリを含め(たとえばMaven経由 )、Grulesサフィックスとすべてまたは一部のパラメーターの処理ルールの説明を使用してGroovyスクリプトを作成することです。
HelloWorldプロジェクトは、3つのファイルで構成されています 。
HelloGrules.groovy
package test email isEmail ["Invalid email"] age toPositiveInt ["Invalid age"] >> {it > 18} ["You must be adult"]
Test.groovy
package test import org.grules.Grules class Test { public static void main(String[] s) { def grules = new Grules() def result = grules.applyRules(HelloGrules, [email: "megmail.com", age: "35"]) assert result.cleanParameters.age == 35 assert "email" in result.invalidParameters assert result.invalidParameters.email.errorId == "Invalid email" println result } }
build.gradle
apply plugin: 'application' apply plugin: 'groovy' apply plugin: 'maven' repositories { mavenCentral() } mainClassName = "test.Test" dependencies { groovy 'org.codehaus.groovy:groovy:2.0.5' exclude group: 'asm', module: 'asm' compile 'org.grules:grules:0.2.0.8' exclude group: 'asm', module: 'asm' }
開始するには、ルートディレクトリで
gradle run
コマンドを
gradle run
ます。
プロジェクトの詳細については、次のリソースを参照してください。wiki 、 オンラインコンソール 、 github 、 出版物 (英語)。