GoTheDistance

ござ先輩と言われています。(株) クオリティスタートという会社をやっています。

ワークフロー管理って何よ?

現在BPM製品の研修を受けています。業務フローをちょこちょこデザインしたりする中で、結局の所ワークフロー管理って何をすべきなのかを考えていたんですが、id:habuakihiroさんのこのエントリがズバっと来た。

特に「おお!コレだ!」とひざを打ったのはこのくだり。

つまり、休日かどうかを判定するのもひとつの仕事だし、請求処理もひとつの仕事といえるわけです。そして、複数の仕事を連ねてひとつの価値連鎖を作り上げているのが業務フローであり、その連なり方が複雑になったときにフロー制御としての分岐が発生します。これは決して仕事(=関数)の中と絡み合ってはいけないのです。

詳しくは原文を見て頂きたいのですが、ここで重要なのは「複数の仕事を重ねてひとつの価値連鎖を作り上げるのが業務フロー」というズバッときた定義。もう1つは「仕事の中でフロー制御を行ってはいけない」という指摘です。前者は文字通り解釈すればよいので、後者を自分なりに掘り下げます。羽生さんの例では、休日かどうかを判定する仕事のアウトプット(メソッドの戻り値になるのかな)で、次の業務フローのメソッドを実行すると非常に変更に弱くなるガタガタなシステムになってしまうことをわかりやすく説明してくれています。

つまり、仕事というのはそれ自体で完結する閉鎖性が無いとあかんよってことだと思う。もっと簡単に言うと、休日を判定する以上のことはやらないってこと。休日だったら「XX業務を実行」とかいう分岐を書くんじゃない!ってことです。仕事と仕事の間をつなぐルールはワークフロー管理エンジンに切り出すことが肝要で、多分S2buriだとその辺りをPOJOで定義してDIキターヨーになると思われる。

・・・って思ってたらもっとわかりやすい図解が。


IF文を切り出すということは、つまりフローをルールの外部に別途定義するということなのです。

S2buriが「IF文撲滅!」というスローガンを抱えている意味がやっとわかりました。分岐無しでロジック書くのは無理だろー、一体何のIFを指してるんだとか思ってたけど、スコープが違ってたw

SQLを学習できるWebサービスを作りました。