3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ImtStateMachineについて、2018年12月版と2021年10月版の比較

Posted at

この記事について

現在 Qiita 内でキーワード ImtStateMachine にて検索するとこちらの記事がトップに出てくる。

なお、ImtStateMachine のファイル内にバージョン表記が見受けられなかったため、便宜上前述の記事で使われているものを 2018年版 と呼ぶ(2018年に書かれた記事であるため)。最新のものは 2021年版 と呼ぶ。この呼称は一般のものではなくこの記事内に限定したものである。

ソースを目視で見て確認しているだけなので間違ってたらごめんなさい。

主な差分

変更

  • ファイル名変更
    • 2018年版: ImtStateMachine.cs
    • 2021年版: StateMachine.cs
      • ただしクラス名は ImtStateMachine のまま。
  • クラス定義の型パラメータ変更
    • 2018年版: public class ImtStateMachine<TContext>
    • 2021年版: public class ImtStateMachine<TContext, TEvent>
      • ただし 2021年版を基底クラスとして、TEvent を int で固定して従来と同じ型パラメータにした派生クラスが互換性のため(?)に作られている。
      • TEventAddTransition<TPrevState, TNextState>(TEvent eventId) SendEvent(TEvent eventId) で使われている引数。2018年版では int で固定されていたが、2021年版では任意の型を使えるようになった。
  • ステートクラスのインスタンスは2018年版では内部で作成していたが、2021年版では新規追加されたメソッド RegisterStateFactory(Func<Type, State> stateFactory) によって、生成する Func を登録できるようになった。これにより既存のインスタンスをステートクラスとして使用することができると思われる。多分。
    • Factory でも生成できなかった場合は protected virtual TState CreateStateInstance<TState>() にてインスタンス化をするので、これを override して任意のインスタンスを使えるように書き換えられるかもしれない。

追加

  • 最後に受理された eventId が public TEvent LastAcceptedEventIDプロパティから取れるようになった。

廃止

  • 可変長引数で一気に遷移構造を登録できる AddTransitionRange() が廃止された。
  • SetStartState の非ジェネリクス版 SetStartState(Type startStateType) が廃止された。ジェネリクス版の SetStartState<TStartState>() を使おう。
  • クラス ImtSynchronizationStateMachine<TContext> の廃止。SynchronizationContext は使ったことが無いのでわからない。

まとめ

廃止されたメソッドやクラスがありますが、概ね互換性は維持されているように見えます。よかったよかった。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?