出張旅費規定

ぐぐってみるとDroolsの使い方を説明するサンプルは「出張旅費規定」というか出張の日当計算が多い。まるで「Hello world」の次はそれをやるのが慣例なのかと思うくらい。ふみゅ~。ほいじゃ作ってみますか。どうせ作るなら自社の規定に沿ったものを...、と思ったら

  • その規定が不親切なくらいわかりにくい。これじゃ旅費以外支給されない、と言われたら信じる人がでてくるかもしれないw
  • サンプルの旅費規程はどれも日帰り出張用。4/2~4/4みたいに宿泊を含むようなサンプルはないのかね?

ということでいきなり壁にぶつかる。前者は現状に照らしあわせたルールで考えることにしたけど、問題は後者。Drools的に考えると

  1. 社員や出張内容はPOJOとして表現する。
  2. 出張内容を表すPOJOはあらかじめ、出張期間の月日毎に展開した上でWorking memoryへinsertする。
  3. 支払いのルールの中で支払い内容を表すPOJOを生成(これもWorking memoryへinsert)
  4. 最後に支払内容を集計。集計済の支払内容はretract()する。

という感じなのか?やってみたらできたので良しとしよう。

ただ例題が簡単すぎたというか、手続き型で十分なレベルだったのでDroolsの良さは感じられない。このあといろいろな条件を実装していくと便利さが感じられるのか?あとDroolsのルールで書くか、呼び出す側のJavaで書くかのさじ加減も難しい。Droolsがわかればもっとルール側で記述できるようになるんだろうけど、現状ではルールで必要なデータはJavaコード側で前処理してPOJO(というかDTO)としてルールへ供給する、という処理が必須。ルールによる処理をブラックボックス化するには、Drools側からデータを勝手に取りに行って、結果を書き込めるような形にしないと、ルール変更のたびにDTOというかI/Fに変更が発生する。まぁまだ時間はあるからいろいろいじってみますか。