命令型プログラミング言語の一般的な問題の1つは、ツリーマークアップやデータ処理のルールセットなど、宣言構造の式の欠如です。 Groovyは、
Builderなどのクラスや抽象構文ツリーレベルでの
メタプログラミングでこの問題を解決しました。
同様に、入力データの処理は、クライアント/サーバーアプリケーションの不可欠な段階の1つです。 このプロセスは、多くの場合、一連のifおよび対応する例外によって記述されます。 多数のパラメーターを使用すると、このようなコードは読みにくくなり、正確性の分析が重要なタスクになります。 そのため、多くの場合、データの前処理のロジックはいくつかのメソッドとクラスによって「広げられ」ます。 さらに、新しいパラメーターが表示されると、そのパラメーターのチェックと正規化(フォーマット、文字のエスケープなど)を忘れがちです。 この問題の解決策として、DSLを使用して宣言スタイルでこれらのルールを記述することができるGroovyライブラリが作成されました。 たとえば、次のスクリプトは、メールアドレス、ログイン、性別、「ルールに同意します」ボックスの状態、重量、日付の6つの受信パラメーターを処理します。
import org.grules.console.Gender
スクリプトの実行結果は、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 、
出版物 (英語)。