コンテンツにスキップ

チェックアウト(マルチマシン)

ソース: sample/shared/…/examples/checkout/

チェックアウトサンプルは、Auth・Cart・Checkoutの3つの独立したステートマシンにまたがるeコマースフローをモデル化します。マシンはお互いの参照を持たず、すべての結合は StoreRegistryRelay を使った単一の AppCoordinator にあります。


マシン

マシン ステート 責務
AuthStateMachine SignedOutSigningInSignedIn サインイン/サインアウト
CartStateMachine EmptyLoadingLoadedError ショッピングカートの内容
CheckoutStateMachine IdleSummaryProcessingDoneFailed 支払いフロー

リレートポロジー

AuthStore  state(SignedIn)      ──▶ CartStore.LoadForUser(event.user.id)
AuthStore  state(SignedOut)     ──▶ CartStore.Clear
AuthStore  state(SignedOut)     ──▶ CheckoutStore.Cancel

CartStore  effect(CartChanged)  ──▶ CheckoutStore.SyncCart(event.items, event.total)

CheckoutStore  state(Done)      ──▶ CartStore.Clear

デモされるパターン

リレーによる関心の分離

各マシンは自分のドメインのみを処理します。リレーオブジェクトの宣言が単一の読みやすいトポロジードキュメントを形成します。

ステートリレーとエフェクトリレー

AuthRelayステートに反応します — マシンがそのステートに入るたびに発火します。CartRelayエフェクトに反応します — その一度限りのエフェクトが発行されたときのみ発火します。

register と自動クリーンアップ

register は所有する CoroutineScope がキャンセルされたときにストアを停止・登録解除する invokeOnCompletion コールバックをアタッチします。