問題タブ [state-machine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
154 参照

state-machine - 動的ステータス進行の高レベルパターン?

このような状況に遭遇したことはありますか?もしそうなら、どのように解決しましたか?

次のような複数の進行段階を経た記録があります。

提出->予備評価->最終レビュー-> アクティブ

これらの主要なステータスタイプの進行順序は保証されています。ただし、物事をかなり複雑にする要因があります。

  • これらの状態の一部では、レコードが次の状態に移行する前に、いくつかの追加条件が満たされる必要がある場合があります。これらの条件または「サブステート」の一部はオプションであり、一部は必須である場合があります。または、「3つの可能な条件のうちの任意の2つ」の基準を満たす必要がある場合があります。これらのサブ状態またはサブ条件は、任意の順序で満たすことができます。

  • プロセスは動的に変更でき、グループごとに異なります。つまり、システムには複数のグループが存在し、各グループのユーザーは、プロセスに関与する状態とサブ条件を指定できます(一部のグループでは、一部の状態とサブ条件がスキップされる場合があります)。それを容易にするために、何らかの方法でプロセスをデータベースに保存する必要があります。

さて、これはかなり複雑な基準のセットであることがわかっているので、多くのフィードバックは期待していません。しかし、実装を支援するために、公開されているデザインパターン、テクニック、またはアプローチがあるかどうか疑問に思っています。これはエレガントな方法で。同僚と私は何時間もかけて最善の解決策を考え出しましたが、それでも現在の解決策はあまりにも醜いように感じます。

さらに明確にしたい場合は、コメントを追加してください。説明するのはかなり難しい問題なので、十分に明確でなくても驚かないでしょう。ありがとう!

0 投票する
5 に答える
3431 参照

c++ - ステートマシンの実装

私は以下に説明するようなステートマシンを持っています。

2つの開始状態のいずれかで開始できますが、ハンドシェイクの4つの状態すべてをヒットする必要があります。そこから、データのペイロードを転送するか、データのペイロードを受信することができます。その後、元の開始状態に戻ります。

ハンドシェーク:

-> StartedState1-> FinalState1-> StartedState2-> FinalState2

-> StartedState2-> FinalState2-> StartedState1-> FinalState1

ペイロード転送:

-> SendPayload-> SendEnd-> StartedState?

-> ReceivePayload-> ReceiveEnd-> StartedState?

以下のコードは、私の現在のアーキテクチャを表しています。残念ながら、各プロセスの最後に、州内から次の州が何を打つべきかを知るのに十分な情報がありません。

私の要件に基づいてこのアーキテクチャを改善する方法について誰か提案がありますか?

ありがとう、PaulH

0 投票する
7 に答える
7903 参照

c++ - 有限ステートマシン: 設計が悪い?

有限ステート マシンは、一般に OOP の悪い設計と見なされますか?

私はそれをよく聞きます。そして、それを利用する非常に古い文書化されていない C++ の部分に取り組まなければならなかった後、私は同意する傾向があります。デバッグするのは苦痛でした。

可読性/保守性の問題はどうですか?

0 投票する
3 に答える
3490 参照

workflow-foundation - 線形ワークフローよりもステートマシンの使用を好むのはいつですか

ステートマシンは、ワークフローがユーザーから提供された回答に「反応」する必要がある場合に、複数のループと分岐またはロジックがある場合に、ワークフローの複雑さを軽減できます。これは、イベント駆動型のワークフローになります。

どのような状況でステートマシンを使用することを選択しましたか?また、時間と複雑さの点でどのような種類の痛みが軽減されましたか?

0 投票する
3 に答える
1950 参照

erlang - Erlang gen_fsm を視覚化する方法

ソース コードから開始して、Erlang gen_fsm のダイアグラムをグラフィカルにレンダリングする既存のツールを知っていますか?

0 投票する
1 に答える
10809 参照

c# - ステートレス(Googleコード上)とWindowsワークフローの比較

私は、もっと単純なものを優先してWindowsWFを捨てるべきだと考え始めています。ワークフローの実行を長期間一時停止して、後で復元する必要はありません。ただし、基本的なサスペンド/レジューム/アボート(シリアル化なし)を備えた単純なステートマシンフレームワークが必要です。

Google Codeからステートレスフレームワークをダウンロードして試してみますが、他の.NETプログラマーが何を使用しているのか聞いてみたいと思います。

EDIT Statelessは実装が本当に簡単に思えますが、それがキャンディーマシンにとって正しいことかどうか疑問に思います。自動化では、ステートマシンの使用方法について常に矛盾を感じています。私は「ステートマシン」という用語を使用しますが、フローチャートのように使用するため、大まかに使用します。状態を使用してマシンの現在のモードを表す代わりに、それを使用して関数を実行します。したがって、この場合のステートレスでは、キャンディーマシンのコントローラーで関数を呼び出すためのメカニズムとして、ある状態から次の状態への遷移を実際に使用します。考え?

0 投票する
9 に答える
17257 参照

c - C のステート マシン

Cでステートマシンを書く最良の方法は何ですか?
私は通常、for(;;) に大きな switch-case ステートメントを記述し、外部操作が終了したときにステート マシンに再度入るコールバックを使用します。
もっと効率的な方法を知っていますか?

0 投票する
1 に答える
571 参照

conditional-statements - この特定の有限状態機械をどのように設計するのですか?

次のシステムを設計する方法について頭を悩ませようとしています。これは、有限状態マシンとして定義できると思います。

城を形成する 16 個のビルディング ブロック (塔、壁、ゲート) の山があるとします。プレーヤーは、ブロックをフロアプランの 16 か所にドラッグできます。正しく行うと、城全体が表示されます。すべての塔 (4 つある) は同じなので、4 つの角のどこにでも行くことができます。一部の壁についても同様です。

全体として、フロアプランにはビルディング ブロックを配置できる 16 のスポットがあり、各スポットには 17 の「状態」があります: 空 + 16 のビルディング ブロックのいずれか 1 つ。いくつかの計算を行うと、これは 17^16=たくさんの組み合わせにつながります。

プログラムは、空のフロアプランとビルディング ブロックの山から始まります。次に、「自分の城を建てて、塔から始めましょう」のようなメッセージが表示されます。ユーザーがタワーを正しく配置すると、「よくできました。今度は 4 つのタワーをすべて構築します」と表示されます。あなたはアイデアを得る。

問題は、プレイヤーができることが非常に多いことです。ブロックを間違った場所に置いたり、ブロックを取り除いたり、与えられた指示を無視してフロアプラン全体に壁や塔を正しく配置したりします。

何千もの if-then ステートメントを使用して、次のステップに進むか、エラー メッセージを表示するか、プレーヤーの動作に基づいて前のステップに戻るかを決定する必要がないようにできれば、素晴らしいことです。

構築シーケンスの各ステップの NEXT、PREVIOUS、および ERROR 条件をどのように説明しますか? このための設計方法はありますか?ご意見をお寄せいただきありがとうございます。

0 投票する
2 に答える
760 参照

ruby-on-rails - before_filter が state_machine で機能しない :(

state_machine に依存してさまざまな状態を管理するモデルがあります。特定のイベントでは、遷移を行う前に結合テーブルを作成する必要があるため、before_transition が必要です。残念ながら、うまくいきません。

DocumentSet.submit を実行すると、can_submit を評価するため、実際には populate_join_table には入りませんか? 偽として。

私は何が欠けていますか?