可以使用各种编程模式来实现服务,从业务过程流方式的 BPEL 流程,到状态机方式的事件管理,以及到声明性业务规则方式。.对某种模式的熟悉程度和问题的本质将决定所选择的实现方式。比如,有些问题使用状态机比使用声明性规则具有更加简洁的表述。让我们了解一下这些不同的服务类型,并讨论在不同的情况下应该如何选择更好的服务类型。
业务流程
业务流程 为协调企业服务和描述业务逻辑提供了基本的手段。业务流程由一系列按照指定顺序执行的(串行或并行)活动或步骤组成。业务流程编辑器是让您能够依据 BPEL 标准快速地编辑业务流程的可视化构造工具。
业务流程本身也是一个服务。可以使用它来协调可重用的子流程或者其他具有不同实现类型的服务。业务流程的一个重要特点是其长期性和与人的交互性。流程的生命期可能非常短,在高度自动化的系统中这种情况很常见。流程也有可能运行非常长的时间,也许几天甚至几个月,并等待人类用户完成某项与活动相关联的特定工作之后才能继续运行。例如,业务流程可能需要耐心地等待管理人员批准一项旅行请求。
图 3 展示了如何使用业务流程编辑器来构造简单的旅行登记业务流程。
图 3. 业务流程编辑器
业务状态机
业务状态机 是事件驱动的业务事务,该业务事务定义了应用软件中给定部分的一组状态。状态机根据接收到的外部事件从一个有效状态转移到下一个有效状态。对于一个给定事件,使用各种条件来决定新的有效状态。售货机可以作为一个简单的例子,当它接收到足够的钱则转换到激活选择按钮的状态。在做出选择之后,它就转变到分发商品(比如说一个巧克力棒)的状态。可以使用状态机编辑器来构造业务状态机,它与业务流程编辑器一样是可视化的编辑工具,并且几乎不需要具有 Java 编程经验。
可以使用业务状态机和业务流程来协调应用程序的各个部分。二者之间有一些细微的差别,这使得它们在解决某些类型的问题时各有所长。状态机非常适合于循环模式或者那些能自然地想到一组有效状态的情况。这一点非常重要,因为在状态机中,实际在一个状态中并不进行任何动作,而仅仅是等待转移到下一个状态的信号并随后发生状态转移。当状态机从一个状态转移到另一个状态的过程中,它可以完成一些工作,比如售货机的例子中将巧克力棒分发给顾客。与之相反,业务流程则是在其活动中完成工作。它们非常适合于顺序执行或者并发执行的任务。与业务流程相似,业务状态机能够调用其他实现类型的服务,并且能够将自身作为服务来调用。图 4 显示了使用业务状态机编辑器所构造的业务状态机
图 4. 业务状态机编辑器
对于那些熟悉 UML 的用户,业务状态机是 UML 状态机的子集,而且它更适合于业务用户。
业务规则
业务规则 描述并实现了业务策略和实践。规则可以增强业务策略、制定决策、或从现有的数据中推理出新的数据。通常有两种不同的指定形式:规则集或者是决策表。
如果这些解释听起来更像一堆专业用语,那么请看下面的这个例子。业务规则通常形如:如果是金卡客户,并且在本公司消费长达十年之久,那么可以给予他们百分之十的折扣。这条业务规则是一个简单的 if-then 规则。如果规则计算为真,则执行一个动作,在本例中是给予客户折扣。业务规则集 由一组业务规则组成,这组规则在复杂业务逻辑的实现中具有很强的灵活性。
决策表 则用来处理基本的业务规则逻辑。它虽不如规则集那样灵活,但是用来描述简单的规则逻辑时能带来极大的便利。经常旅行的人会比较熟悉下面这个关于决策表的经典例子。假设想要避开寒冷并花光所有的频繁飞行积分去夏威夷。您会查看一张表,分别找到居住城市和夏威夷所在的行和列,这个交叉处所显示的正是这趟旅程所需的积分数。这仅仅只是能用决策表轻松描述的业务规则逻辑中的一种。
文章来源于领测软件测试网 https://www.ltesting.net/