美文网首页
产品经理懂点技术:状态机

产品经理懂点技术:状态机

作者: 陪学 | 来源:发表于2022-11-04 15:08 被阅读0次

做产品的时候,我们总能遇到一些比较复杂的逻辑问题,而普通的流程图,或时序图对于对象和状态的解读缺乏直观的描述。

这时,推荐使用简单的状态图来对逻辑问题进行描述。

在开发过程中,如果有逻辑关系比较混乱的,我们就可以考虑使用有限状态机来解决问题。

状态机,表示某几种状态之间的切换。描述一个对象从一个状态,经过一个事件驱动转变为另一个状态的过程,叫做一次状态迁移,一个对象所具备的所有状态迁移过程叫做状态机。

因为状态机的状态是有限的,所以一般上也叫有限状态机(Finite State Mache)。

利用状态机可以精确地描述对象的行为,从对象的初始状态起,开始响应事件并执行某些动作,这些事件引起状态的转换,对象在新的状态下又开始响应状态和执行动作,如此连续进行直到终结状态。

 

状态机的作用

1、不需要每个接口都校验当前状态:直接数据库配置某个状态,加某个操作,才能进行下去,如果不对的状态进行该操作,会报错

2、同一个接口配置不同的流程:同一个如审批通过的接口,不同状态下审批不通过,需要走不同的流程,如审批中审批不通过,走改变状态的流程,变更审批中审批不通过,走回退历史的版本数据的流程,如果不用状态机,则需要分开写2个接口,或者在一个接口里走if else,考虑到复杂的订单状态变迁触发节点,可能if-else会非常多,比如某5种状态下的同一个接口走不同的流程

3、实现流程可配制化,高内聚,集中配置,直接在数据库更改配置信息,可维护性和扩展性强

4、易变更,快速修改

5、易使用,极大简化前端的代码,是否可以删除,变更按钮的显示和隐藏通过后端返回

 

状态机由什么组成?

  • 状态:表示一个模型在生存期内的状况

  • 转换:表示两个不同状态之间的联席

  • 事件:是在某个时间产生的

  • 活动:是在状态机中进行的一个非原子的执行,有一系列动作组成

  • 动作:是一个可执行的原子计算,它导致状态的变更或者返回一个值

当需要描述一个对象或系统的行为状态时,相比于直接的语言描述,更推荐使用状态机表或状态机图的形式。

首先看一下图形中的基本元素:

分析需求时需要了解以下六种元素:

  • 起始

  • 终止

  • 现态

  • 次态(目标状态)

  • 动作

  • 条件

 

这样,我们就可以完成状态机图了,来看一个具体的案例吧:

1.现态:是指当前所处的状态。

2.条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。

3.动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。

4.次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

 注意:

1、注意区分“程序动作”和“状态”。如何区分“动作”和“状态”?

“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了;

“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。

2、状态划分避免缺漏,这样会导致跳转逻辑不完整。查看状态图或者状态表是很有必要的,尽量让设计方案足够完善。

 

如何做状态机表?

先看案例,下面的状态机图展示了一个文件的状态流转。

将状态图转为状态表有多种制表法,如果以纵坐标区分,有两种:

 

左边的状态表的纵坐标为初始状态,横坐标为终止状态。

右边的状态表的纵坐标为动作条件,横坐标为终止状态。

如果动作多且复杂的情况下,建议采用右侧表格方式,会更清晰。

状态机图的使用场景

状态机图常应用在程序的设计过程中,使用清晰明了的状态机图设计代码逻辑架构,再使用编程语言去实现。

也可以画一个状态机图来展示某岗位的工作:

 

开发实现状态机的设计实例


实例:电商平台订单状态设计

 

状态机的技术实现

首先会有2个表:flow和flow_picker表:

flow表:主要用于存放不同的流程的名字,主要会有个id,订单走一个流,退货单走一个流

flow_picker表:主要是每个业务创建的时候,会关联到哪个flow,就是关联到哪个流程id里,会通过来源,渠道,类型,等级等等条件,筛选出这个订单,关联的flow,存入订单表里的flow_id字段

 

配置流程的表:

先会根据订单的flow_id筛选出走哪个流程,再根据来源状态 source_status,操作operation_value,到达目标状态target_status,执行action_name,

action_name是自己配置的,action_name里面的类就是不同流程,执行的代码

根据这个配置,初始化时注入所有的action,可以调到数据库对应的配置的aciton类,同一个接口,可执行多个流程就完成了。

 

相关文章

  • 产品经理懂点技术:状态机

    什么是状态机? 做产品的时候,我们总能遇到一些比较复杂的逻辑问题,而普通的流程图,或时序图对于对象和状态的解读缺乏...

  • 产品经理懂点技术:状态机

    做产品的时候,我们总能遇到一些比较复杂的逻辑问题,而普通的流程图,或时序图对于对象和状态的解读缺乏直观的描述。 这...

  • 产品经理要懂技术么?

    一、产品经理要懂技术么? 参与产品设计并通过与工程师协作来共同研发产品的产品经理都需要懂技术 二、产品思维与技术思...

  • 产品经理需要懂技术吗?

    产品经理如果需要懂技术,要掌握哪些技术,为什么?产品经理如果不需要懂技术,那要具备哪些能力,为什么? Wallac...

  • 产品必懂的技术必修(四)

    前几篇: 产品必懂的技术必修(一) 产品必懂的技术必修(二) 产品必懂的技术必修(三) 第五章 产品经理必懂的服务...

  • 《产品经理必懂的技术那些事儿》读后感

    《产品经理必懂的技术那些事儿》这本书讲述了,为什么需要懂技术的原因,还有一些比较基础的技术。作为一名产品经理懂技术...

  • 产品经理必懂的技术思维1 程序与语言

    前言 产品经理需不需要懂技术 产品经理需不需要懂技术? 这是一个没有完美回答的问题。 产品经理这个行业中,男女的比...

  • 产品经理懂点技术吧

    众多IT企业产品经理、研发从业人员、销售从业人员、市场从业人员从产品角度理解工作产生帮助,产品经理培训可以参考《给...

  • 产品经理的运营思维

    《产品经理是否需要会设计》、《产品经理是否需要懂技术》、《产品经理是否需要学管理》、《产品经理是否需要做运营》...

  • 我眼中的产品经理

    我眼中的产品经理 产品经理是该多懂技术,还是要懂设计,还是懂用户; 产品经理是要擅长沟通,逻辑条理清晰,还是会汇报...

网友评论

      本文标题:产品经理懂点技术:状态机

      本文链接:https://www.haomeiwen.com/subject/bsxutdtx.html