Tinder 状态机 - 使用列表
我试图用一些复杂的业务逻辑实现状态机
我持有一个需要迭代的对象列表并将每个对象发送到状态机
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论