雇用主が jBPM をモデルにした IP を所有したかったので、ワークフロー エンジンを作成しました。独自の有限ステート マシンを作成する代わりに、このようなツールを使用する理由は、永続性を変更せずに変更に対応し、ワークフロー プロセスのエッジ ケースをサポートするためです。
永続性を変更せずに変更を受け入れる
典型的な、またはおそらく「ナイーブ」と呼ぶ方が適切な、有限状態マシンの実装は、管理されるデータとデータが流れるプロセスに密接に結合された一連のデータベース テーブルを備えています。過去のバージョンを保持し、プロセス中に誰がどのアクションを実行したかを追跡する方法もあるかもしれません。これが問題となる場所では、データとプロセス構造が変更されます。次に、これらの密結合テーブルは、新しい構造を反映するように変更する必要があり、古いものと下位互換性がない場合があります。
ワークフロー エンジンは、シリアライゼーションを使用してデータとプロセスを表現し、統合ポイント (特にセキュリティ) を抽象化するという 2 つの方法でこの課題を克服します。シリアル化の側面は、データとプロセスがシステム内を一緒に移動できることを意味します。これにより、同じタイプのデータ インスタンスが、たとえば新しい状態を追加することによって、実行時にプロセスを変更できるようになるまで、まったく異なるプロセスに従うことができます。また、基盤となるストレージを変更する必要はありません。
統合ポイントは、プロセスにアルゴリズムを注入する手段であり、認証ストア (つまり、アクションを実行する必要があるユーザー) に結び付けます。注入されたアルゴリズムには、状態が完了したかどうかの決定が含まれる場合がありますが、認証ストアの例は LDAP です。
ここでのトレードオフは検索が難しいことです。たとえば、データはシリアル化されているため、通常、履歴情報をクエリすることはできません。レコードを取得し、逆シリアル化し、コードを使用して分析する以外は不可能です。
エッジケース
ワークフロー ツールのもう 1 つの側面は、その設計と機能に組み込まれているエクスペリエンスです。これは、自分で作成することを考えず、必要になったときに後悔する可能性があります。私の頭に浮かぶ 2 つのケースは、時限タスクと並列実行パスです。
時限タスクは、特定の期間が経過した後、データに対するアクターの責任を割り当てます。たとえば、プレス リリースが作成され、承認のために提出され、その後、レビューなしで 1 週間放置されたとします。おそらくシステムに実行してもらいたいことは、残っているドキュメントを特定し、適切な関係者の注意を引くことです。
私の経験 (コンテンツ管理システム) では並列実行パスは一般的ではありませんが、それでも十分に頻繁に発生する状況です。これは、特定のデータがレビューまたは処理の 2 つの異なるパスに送られ、後で再結合されるという考え方です。このタイプの問題には、便利なマージ アルゴリズムと、データを同時に乗算する機能が必要です。事後にそれを手製のソリューションに織り込むことは、特に履歴データを追跡したい場合は、見た目よりもはるかにトリッキーです。
結論
システムが変更される可能性が低い場合、特に変更によって古い情報が破損する可能性がある場合は、独自に展開する方が簡単な解決策になる可能性があります。ただし、そのような耐久性が必要であると思われる場合、またはこれらの珍しいが困難なシナリオが発生する可能性があると思われる場合は、ワークフロー ツールを使用すると、データやビジネス プロセスとして窮地に陥ることがないように、より多くの柔軟性と保証が提供されます。変化する。