24

私の職場には、基本的にメッセージ駆動型のステート マシンであるシステムがあります。さまざまな種類のメッセージを取り込み、メッセージに基づいてコンテキスト/状態を検索し、メッセージと現在の状態に基づいて何をすべきかを決定します。通常、結果はシステムから送信されるメッセージです。

.NET でステート マシンを実装するための適切なオープン ソース フレームワークはありますか? 私は Windows Workflow の最新リリースを調べましたが、これは良い選択肢のようです。ただし、デフォルトの永続化メカニズム (状態遷移データを報告する必要があります)、テスト容易性、および WF チームがフレームワークを再設計しているという事実 (おそらく) について懸念があります。

WF の代わりに、昔ながらの GoF の「状態」パターンを実装し、Spring.NET を使用してすべてを結び付けようと考えています。すでにこれを行っているもの、または同様のものはありますか?

4

7 に答える 7

14

正確な要件によっては、ステート マシン コンパイラで GoF の「状態」パターンを実装するのに十分な場合があります。Graphvizを使用していくつかの画像形式に変換できるドットだけでなく、C# も生成できます。以前のプロジェクトで使用したことがあり、「単純な」ステート マシンを生成するのに十分であることがわかりました。これが役立つことを願っています。

于 2009-03-10T22:03:33.720 に答える
4

NStateを見てください

https://github.com/benaston/NState

https://nuget.org/packages/NState/ .

免責事項:私はそれを維持します。

于 2013-03-30T13:01:52.257 に答える
1

C#のNorthStateFrameworkを検討してみてください。オープンソースではありませんが、ライセンス供与は比較的安価です。ステートマシンの構成と継承を通じて再利用できるのは、私が知っている唯一のフレームワークです。つまり、数行のコードでベースステートマシンから継承し、状態、遷移、アクションなどを追加できます。既存のステートマシンクラスを取得して、別のステートマシンに「プラグイン」することもできます。GOFまたは他のパターンと比較して、このフレームワークを使用してステートマシンを実装および操作することがどれほど簡単であるかを信じられないでしょう。

于 2012-01-31T01:48:49.537 に答える
1

ステートマシンのXML記述をC#ステートパターンの拡張バージョンに変換するステートマシンコードジェネレーターであるStateBuilderDotNetをご覧ください。すべてのUMLセマンティクスをサポートします。ステートマシンは、階層型、並行型、および非同期型にすることができます。ステートマシンを作成するためのグラフィカルツールも利用できます。

免責事項:私はこれらのソフトウェアの作者です。

于 2012-01-23T23:19:07.200 に答える
1

私は、(とりわけ) .NET 用の一般的な有限状態マシンを実装するオープンソース プロジェクトを維持しています。QuickGraphの上に構築されているため、多くのグラフ分析アルゴリズムを無料で利用できます。詳細については、このページを参照してください。

于 2009-12-07T20:42:05.703 に答える
0

.NET のスマート ステート マシンであるStatyを作成しました。C# ポータブル クラス ライブラリ (PCL) として記述された Staty は、次のような機能を備えた表現力豊かなイベント駆動型ステート マシンとして提供されます。

  • 同時発生の安全性
  • 外部および内部イベント
  • 州ごとに別のクラス
  • 入口と出口のアクションと
  • ステートマシンを構成する流暢な構文。

これは無料のオープンソースで、NuGetで入手でき、C++で最も有名なステート マシンであるDavid Lafreniere の C++ State Machine のアイデアに基づいています。

于 2016-07-07T14:39:32.317 に答える