How to use maru-dog JavaBeansプロパティデータバインドライブラリ (9)

前回から少し経ちますが、今回こそはmaru-dogのDSLについて解説したいと思います。maru-dogのバージョンは0.5.16以降を前提とします。

これまでの日記でmaru-dogの内部DSLについては何度か簡単に説明したと思います。簡単におさらいすると、JavaBeansのプロパティをバインドする際にバインド定義の上書きを行うことができるというものでした。

maru-dogのDSLは宣言で囲むということと、バインド定義の順番を守るという2つのルールを守ればそこそこ自由な記述が可能です。それでは簡単な例を示します。

Director director = Marudog.getDirector(new Config() {

    @Override
    protected void define() {
        declareFor(UserBean.class);
            bound("name").from(UserProfile.class).bind("userName");
        end();
    }

});

まず必ずConfigクラスのdefineメソッド内で宣言を行う際は、各宣言の開始と終了を表すdeclareForとendメソッドを定義し中の宣言を囲ってやる必要があります。宣言の中のバインド定義は最低限boundとfromを定義しなければなりません。
(ちなみにdeclareForとendの間に何も定義されていないと、なにも宣言されなかったという扱いになります。)

上記定義はこれまで解説したものと全く同じです。それ以外にも以前maru-dogのリリース時に説明した流れるようなインターフェースでdeclareFor〜endまでを記述することも可能です。

@Override
protected void define() {
    declareFor(UserBean.class)
        .bound("name").from(UserProfile.class).bind("userName")
    .end();
}

違いが分かりづらいですが全て"."でつながっているところがポイントです。

さらにこんな記述もできます。

@Override
protected void define() {
    declareFor(UserBean.class);
        bound("name");
        from(UserProfile.class);
        bind("userName");
    end();
}

1メソッドごと命令を実行し";"で終了しています。要するにルールは必ず最初にdeclareFor、最後にendを定義し、その中でバインド定義はどんな方法でもいいということになります。唯一のルールはboundやfromを定義する順番(文法ルール)を守るだけでいいのです。

詳細な文法ルールについてはプロジェクトのドキュメントサイトを参照願います。

プロジェクトトップ:http://maru.sourceforge.jp/index.html
ドキュメントサイト:http://maru.sourceforge.jp/document_dog.html
ダウンロードサイト:http://sourceforge.jp/projects/maru/releases/