私は以前、プログラマーとしてワークフローエンジンのいくつかに取り組んできましたが、そもそもワークフローエンジンを最初に選択した理由が明確になりませんでした。そしてプログラマーとして、コードを書くときに何かを行うには少なくとも100の方法があることを知っていますが、最善の方法はほんのわずかです!
私はまだ、良いDI対応のアプリケーションを設計するよりも、ワークフローエンジン(またはその概念)によって解決するのに最適なユースケースを理解していません。私は、ワークフローエンジンが最良のオプションの1つである、ドメイン中立のユースケースの一般的な特性を探しています。
だから私の質問は:良いワークフローエンジンを選択し、その周りにコーディングするためのシグナルとして受け取ることができる要件の一般的な特性は何ですか?
ワークフローエンジンは、最初から最後まで進む必要があるが、そこに到達するためのさまざまなパス/ロジック/ルールがある場合に役立ちます。
たとえば、コンテンツを公開するプログラムを書いているとします。したがって、私の場合、公開は審査プロセスを経て、法的手続きを経て、最終的に承認されます。プロセスロジックとステップを実装するプログラムを作成します。これは私と私の会社にとって素晴らしい仕事です。だから、私は他の人が私のプログラムを使うべきだと決めました。
残念ながら、全員が同じプロセスを使用してコンテンツを公開するわけではないため、異なるケースごとに個別のプロセスを作成する代わりに、ワークフロープロセスを実装して、プログラムが全員に柔軟に対応できるようにします。これらの2つのポイントの間にあるステップ、ルール、またはロジックの数に関係なく、結果は同じです。
したがって、最初から最後までプロセスが変化する場合は、ワークフローを使用してください。誰もが同じプロセスを使用できる場合は、ワークフローは必要ありません。
あなたがユースケースを要求したのは知っていますが、考えられるすべてのユースケースを想像するよりも、利点をリストする方が簡単です。もちろん、利点は比較するエンジンと言語によって異なりますが、一般的には次のとおりです。
ルールをコードの代わりにデータとして保持することで、再コンパイルする必要がないため、変更をすばやくテストしたり、実行時に変更したりできます。ただし、そもそも再コンパイルする必要がない場合は、それほどメリットはありません。
ユーザーはより合理的にルールを編集することが期待できます。プログラマーにコードを書いてもらえないような方法で、インタラクティブにいじることができる可能性があります。
ルールをデータとして保持することで、データを視覚化および変更するためのツールを作成できます。
ルールをデータとして保持することで、メタプログラミングがより簡単になります。データを分析するコードを記述し、複雑な方法でさらに挿入することができますが、これはコードにとって非常に困難です。
これらすべては、コードで直接行うことができます(たとえば、C#パーサーを記述して特定のタイプのすべてのルールを見つけ、より多くのルールのコードを生成し、アセンブリのアンロードを許可する方法で動的にアセンブリに挿入し、ツールを記述しますユーザーはビジュアライザとエディタを使用してこれを行うこともできますが、言語によってはmuchより難しい場合があります(LISPを使用するプログラマは項目1〜4を「プログラミング」と呼ぶ場合があります)。
この種のものを使用する必要がある唯一のケースは、価値の低いユーザーが構成できる場合です。あなたに彼らにツールを与えることによってあなたの問題を解決することができるなら、それからもっと重要な何かに取り掛かることに戻って、それを使います。
それでもそれらをセットアップする必要がある場合は、慣れ親しんだツールで同じ結果が得られる10の異なる方法を考えることができ、サポートとカスタマイズがはるかに容易になると思います。
これは古い質問のように見えますが、実際に何度も表面化しています。 ジョンの答え に同意します。次のシナリオでは、ワークフローエンジンの生産性が非常に高いことがわかりました。
問題のあるドメインや要件にビジネスプロセスがあるかどうかを確認する場合は、非常に注意深く重要です。ワークフローに「適合」させないでください。
ワークフローエンジンの提案に使用するガイドラインがいくつかあります。
1)ビジネスアナリストがコーディングのバックグラウンドを持っていないが、図を描くことができる場合。
最新のワークフローエンジンは、ビジネスプロセスモデリング表記法、またはSharePointや類似のシステムで利用できる機能が少ないバージョンを使用しています。これらにより、技術的には有能であるがコーディングに挑戦するチームのメンバーが、多くのワークフローを設計および開発できます。
2)作業の進行状況を監視する必要がある場合は、エスカレーションを実行し、コンピューター制御のプロセスと人間制御のプロセスを切り替えます。
監視と自己参照は、最新のワークフローエンジンの特徴です。