一个对象可以同时参与两个状态机吗?

时间:2010-01-28 17:02:56

标签: object state

我正在编写一个面向对象的程序,其业务流程需要一个“票证”对象。 “票证”对象以两种方式起作用。它是待售的股票,而且我们自己持有的股票要么以买卖为基础,要么已经承诺购买。

出于这个原因,销售过程中的票证可以具有“可用”或“已售出”的状态(还有其他状态,但这些是重要的状态)。票证也是一个关于其SOR状态的状态,它可以是“sor”或“已购买”。

理论上,“sor”票可以“可用”或“已售出”,购买的票也可以“可用”或“出售”。这两组国家几乎没有直接相关。据推测,“已售出”的机票最终将被“购买”并且“可用”机票将永远不会成为“已售出”。就是这样。

那么我是否可以设计具有两个独立且独立状态的对象?或者它应该只有一个包含以上所有内容的州?什么是最佳做法?

附加:所以这里有一个头盔,虽然我正在等待一些帮助,我已经回到了我的分析,还有另一个奇怪的层面。 “门票”有一个称为“价格”的子对象,这个子对象的票据可以一个价格出售给一个成年人,一个孩子在另一个价格,一个养老金领取者在三分之一。

当故障单处于“SOR”状态时,在故障单级别记录,但当它进入“已购买”状态时,该状态是针对价格记录的,因为故障单可能有多个可能的价格但是当它付款时它只在一个级别支付(这与场地容量等事情有关)。

类似地,当票证“可用”时,它具有多个可能的价格但是它与“价格”“出售”,因为当客户决定购买时,例如,一张成人票,两张儿童票。特定事件的门票可以完全由成人购买,或者大多数卖给儿童,显然通常介于两者之间,但与州相关的信息发生在两个不同的对象中。这有什么不同吗?

2 个答案:

答案 0 :(得分:1)

如果这些州本身真的是独立的,那么在我看来,写作

ticket:
   availability: available or sold
   sor: sor or purchased

比单一状态更清晰,我猜想看起来像

ticket:
      available_&_sor
      available_&_purchased
      sold_&_sor
      sold_&_purchased

在第一种情况下,您将对象视为具有离散可用性状态,以及离散的sor状态,这听起来像是清楚地模拟您的真实世界示例。在第二个中,您有一个编码这两个值的人工状态。

如果你有更多类型的每个离散状态,那么两者之间的差异会被放大,突然你开始有批次的组合。

答案 1 :(得分:0)

如果两个轴上的行为是独立的(特别是如果存在可以想象的具有重叠行为的子类型或变体对象),则Tickets可以保留两个状态对象并根据其行为构建其行为。单独的状态对象。