あなたの状況を完全に理解しているかどうかはわかりませんが、とにかく私はそれに刺すようにします。
年前私は、自分の国の大規模な通信事業者向けのADSLアクティベーション要求のサービスのためのアプリケーションを設計しました。
アップストリームアプリケーションから「アクティベーションリクエスト」を受信しました。異なるプロトコルで異なるデバイスで実行しなければならなかった一連の設定手順を実行していましたが、失敗したり、顧客が退会した場合に1つまたは複数のステップのキャンセルを実装する)。
ソートの「状態機械」に基づいて解決策を選択しました。各リクエストは、ステータス(「新しい」から「完了」まで、さまざまな中間ステップを含む)と一連の子レコードを要約したヘッダー・レコードとして(Oracle DB内で)表示され、それぞれが必要なNステップの1つを表します設定を完了します。
基本的に適切な操作タイプのレコードを選択し、それぞれを解決しようとしました(これにより、プロトコルに従って操作をグループ化することができました。たとえばsnmpやtelnetなど)。
また、開いているすべての「ヘッダー」レコードを定期的にチェックする「メタバッチ」をスケジュールし、すべてのチェックが完了しているかどうかを確認します接続されたステップレコードは「終了」状態にあり、それに従ってヘッダステータスを更新する。 fの面倒。フルステップまたは部分的な「ロールバック」も簡単でした。各ステップごとに、完了したかどうかを示す具体的な記録があったためです。
今日も同様の問題に取り組まなければならないのなら、私はステートマシンベースのアプローチに賛成です。
ステートマシンは設計パターンですが、スレッドは実装の選択肢です。あなたの質問をもう少し明確にしてもよろしいですか? – manku
@Prashantデザインパターンは実装の選択肢でもありませんか?これはまさに私の質問です。追加のスレッドを使用するのではなく、アプリケーション構成プロシージャの状態を維持する良い方法はありますか? – toc777
私はあなたがスレッド内にステートマシンを実装できることを意味しました。私はあなたが尋ねていることは、イベントベースのモデル対スレッドを使うべきかどうかということだと思いますが、それは単なる推測です。申し訳ありませんが、答えはありませんが、質問は私を混乱させる。 – manku