約束のリリース
あけましておめでとうございます。
Java8対応のDBFluteのリリース。
DBFlute-1.1.9 です。
Change Log | DBFlute
(移行の注意点は特になし)
十一年連続、十一回目の元旦リリースです!
これまた「DBFluteフェス2018」での約束、
「元旦に何か出しますよ」を果たすことができました。
ふぅ...ぎりぎり
今回はズバリ、
「ArrangeQueryのドキュメント」
です。
そもそもArrangeQueryとは?
「再利用したいのは、
検索処理まるごとではなく、
where句の一部」
というコンセプトのもと、
業務単位で絞り込み条件をまとめたメソッドを、
ConditionBean自体に実装してみんなで再利用しようと。
「特別過ぎる優待会員」という定形の業務条件があったとして、以下のような条件をアプリケーションのいたるところで書いてしまったり...
// あっちでもこっちでもこの条件をコピー!? cb.query().setMemberName_LikeSearch("S", op -> op.likePrefix()); cb.query().setMemberStatusCode_Equal_Formalized(); cb.query().existsPurchaseList(purchaseCB -> { purchaseCB.query().setProductId_Equal(SPECIAL_PRODUCT_ID); });
ではなく...
ConditionBean や ConditionQuery の、
再自動生成されても消えないExクラスにて実装します。
public class MemberCQ extends BsMemberCQ { ... /** * 特別過ぎる優待会員 */ public void arrangeTooPreferentialMember() { setMemberName_LikeSearch("S", op -> op.likePrefix()); setMemberStatusCode_Equal_Formalized(); existsPurchaseList(purCB -> { purCB.query().setProductId_Equal(SPECIAL_PRODUCT_ID); }); } }
そして、それぞれの検索処理のConditionBeanにて、そのArrangeQueryメソッドを呼び出すだけ!
"arr" で補完して、定義されているarrangeメソッドたちを探しましょう。
cb.query().arrangeTooPreferentialMember(); // 特別過ぎる優待会員
こういう風に小さな部品での再利用を!
ジェネレーションギャップを採用しているDBFluteが、昔から推奨しているパターンです。実際に、多くの現場で使われるようになってきました。jfluteが知っている現場でも大いに活用しています。まさしく ConditionBean の良いところを最大限活かしていると言えます。
ArrangeQueryのドキュメント
さて、別に ArrangeQuery 自体はずっと前から利用できるので目新しいものではありません。DBFluteの機能というよりかは、使い方の話なので、DBFluteが何かを支援するというものもありませんでした。
ですが、今回やったのは...
ArrangeQueryのドキュメントを自動生成
するというもの。
ArrangeQueryを作っても、それをディベロッパーに知ってもらえなければダメですし、全体的にどんなArrangeQueryが用意されているのかがわからないと利用もしづらいです。
そこでせめて一覧ドキュメントのようなものができれば、ということで作りました。
現場でも以前から待ち望んでくれていた機能です。DBFlute-1.1.9からは、SchemaHTMLの中に「ArrangeQuery List」という欄ができあがります。
とりあえずメソッド名と、JavaDocの一行目だけ出しています。これだけでも全体を把握するのに役に立つかと思います。今後は、もっともっと情報を付与していきたいです。
Docタスクで SchemaHTML を作れば自動的に付与されます。
なので、DBFluteをアップグレードしたら自然と作成されています。
ちょっと覗いてみてください。(何もなければ何も出ないですが...)
ドキュメントになるためのメソッドの規約があります。
o arrangeXxx() という形式のpublicメソッド
o 複数行形式のJavaDocの一行目にタイトルを
この辺は、徐々に調整していくかもしれません。
ひとまずは単純な規約で。
DBFluteはwhere句を大切にしたいです!