Tinder 状态机 - 使用列表

发布于 2025-01-14 23:46:08 字数 2011 浏览 3 评论 0原文

我试图用一些复杂的业务逻辑实现状态机

我持有一个需要迭代的对象列表并将每个对象发送到状态机

sealed class State {
    object PendingForAction: State()
    object ActionFailed : State()
    object ActionCompleted : State()
    object PendingNextAction : State()


}

sealed class Event() {

    object OnPendingForAction : Event()
    object OnActionFailed : Event()
    object OnActionCompleted : Event()

}

sealed class SideEffect() {
    object UpdateStatusPendingForAction : SideEffect()
    object UpdateStatusActionFailed : SideEffect()
    object UpdateStatusCompleted : SideEffect()
}

@Component
class StateMachine @Autowired constructor(

) {
    @Autowired
    lateinit var repository: SomeRepository
    val stateMachine = StateMachine.create<State, Event, SideEffect> {
        initialState(State.PendingForAction)
        state<State.PendingForAction> {
            on<Event.OnActionFailed> {
                transitionTo(State.ActionFailed, SideEffect.UpdateStatusActionFailed)
            }
            on<Event.ActionCompleted> {
                transitionTo(State.PendingNextAction, SideEffect.UpdateStatusCompleted)
            }
            
            // so on with next actions
        }
        onTransition() {
            val validTransition = it as? StateMachine.Transition.Valid ?: return@onTransition
            when (validTransition.sideEffect) {
                SideEffect.UpdateStatusPendingForAction -> {
                    //here i want to do complicated code that use the data object from the list
                    //but i can't access it
                }
                
                // and so on ...

            }
        }

    }
}

现在以某种方式用我的数据触发状态机:

val data = listOf(obj,obj,obj...)
// each object is in a different state and I want it to be generic enough to know the 
state and perform the transition automatically

data.forEach{



stateMachine.transition(it)

}

请注意,转换函数仅接受 sideEffect但我希望它接受该对象及其状态

Im trying to implement state machine with some complicated business logic

I'm holding a list of objects that I need to iterate and send each object to the state machine

sealed class State {
    object PendingForAction: State()
    object ActionFailed : State()
    object ActionCompleted : State()
    object PendingNextAction : State()


}

sealed class Event() {

    object OnPendingForAction : Event()
    object OnActionFailed : Event()
    object OnActionCompleted : Event()

}

sealed class SideEffect() {
    object UpdateStatusPendingForAction : SideEffect()
    object UpdateStatusActionFailed : SideEffect()
    object UpdateStatusCompleted : SideEffect()
}

@Component
class StateMachine @Autowired constructor(

) {
    @Autowired
    lateinit var repository: SomeRepository
    val stateMachine = StateMachine.create<State, Event, SideEffect> {
        initialState(State.PendingForAction)
        state<State.PendingForAction> {
            on<Event.OnActionFailed> {
                transitionTo(State.ActionFailed, SideEffect.UpdateStatusActionFailed)
            }
            on<Event.ActionCompleted> {
                transitionTo(State.PendingNextAction, SideEffect.UpdateStatusCompleted)
            }
            
            // so on with next actions
        }
        onTransition() {
            val validTransition = it as? StateMachine.Transition.Valid ?: return@onTransition
            when (validTransition.sideEffect) {
                SideEffect.UpdateStatusPendingForAction -> {
                    //here i want to do complicated code that use the data object from the list
                    //but i can't access it
                }
                
                // and so on ...

            }
        }

    }
}

now trigger somehow the state machine with my data:

val data = listOf(obj,obj,obj...)
// each object is in a different state and I want it to be generic enough to know the 
state and perform the transition automatically

data.forEach{



stateMachine.transition(it)

}

please note that transition function only accept sideEffect but i want it to accept the object and it's state

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文