web-dev-qa-db-ja.com

ジョブ実行フローをモデル化するためのデザインパターンはありますか?

私のアプリケーションには、実行する一連のジョブがあります。

  • 各ジョブは、「未開始」、「開始」、「完了」、「失敗」などの状態を通過します。
  • 各ジョブには、一連の事前条件と事後条件があります。
  • 前提条件が満たされるまでジョブを開始できず、事後条件を満たさない場合は失敗としてマークする必要があります。

たとえば、ジョブがテキストファイルをデータベースにインポートするとします。前提条件は、ソースファイルが存在するかどうかを確認することであり、事後条件は、データベースにデータが存在するかどうかを確認することです。これらの前提条件と事後条件に加えて、ジョブが他のジョブに依存して終了する場合もあります。ジョブテーブルを作成し、ジョブの依存関係テーブルを作成するのは簡単ですが、実際には、これらの検証前後のチェックをデータベースで構成できるようにすることは可能です(したがって、これらの条件が変更または新規になった場合にコードを変更する必要はありません。条件が追加されます)?

どういうわけか可能だとしても、そうするのは良い考えですか?実行する検証チェックが他のアプリケーションとはまったく異なる場合でも、他のアプリケーションでもこのモデルを利用できるように、このモデルを汎用にする必要があります。

3
RKP

しかし、これらの検証前後のチェックをデータベースで構成可能にすることは実際に可能ですか(これらの条件が変更されたり、新しい条件が追加された場合にコードを変更する必要がないように)?

はい。それは簡単に可能です。テクニックはたくさんあります。

  1. このために独自のドメイン固有言語を発明します。そして、あなた自身の通訳を書いてください。

  2. BPELを使用します。

  3. 任意の動的言語(Python、Ruby、Luaなど)を使用して、データベースにコードを配置します。

そうするのは良い考えですか?

番号。

コードはコードとして最もよく表されます。

多くの場合、前提条件チェックはコードとして残すのが最適です。 Ant、Maven、Sconsはすべて、コードでこれを行う方法を提供します。

実行する検証チェックが他のアプリケーションとはまったく異なる場合でも、他のアプリケーションでもこのモデルを利用できるように、このモデルを汎用にする必要があります。

うまく機能するアプローチについては、Ant、Maven、Sconsを読んでください。

また、これを行う多くの商用製品があります。

最後に、Googleの「オープンソースバッチスケジューラ」を使用して、このよく理解され、すでに解決されている問題に対するさらに多くの解決策を見つけることができるはずです。

これをもう一度解決する必要はありません。

1
S.Lott

理論的には、ジョブにリンクする前提条件と事後条件のテーブルを作成できますが、実装は非常に複雑になります。まず、ジョブの依存関係が変更される頻度を決定し、それに基づいて、そのようなシステムを作成する価値があるかどうかを判断します。変更が毎週発生する可能性が高い場合、それは毎年とはまったく異なるシナリオです。

また、何かを一般的なものにするための要件は、言うのは簡単ですが、実装がはるかに難しく、多くのアプリケーションにとって非現実的である可能性があります。このジョブマネージャーを使用できるようにすることを目的としたアプリケーションが現在存在しますか?この汎用ソリューションを使用することを目的としたアプリケーションは、汎用ソリューションが実際にすべてのアプリケーションのニーズを解決できるほど類似していますか?ジェネリックソリューションが実際に必要なものであるかどうか、またはそれが可能であるかどうかを調べることに疑問がある場合は、このプロジェクトにはジェネリックソリューションが必要であることがわかっているが、それよりもXか月長くかかることをマネージャーに伝えてください。このソリューション、またはターゲットアプリケーションがあまりにも異なるために受け入れられる一般的なソリューションを作成することはできません。

0
Ryathal