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

标签 object state

我正在编写一个面向对象的程序,其业务流程需要一个“票”对象。 “票证”对象以两种方式起作用。这是要出售的股票,也是我们自己在出售或退货的基础上持有或 promise 购买的股票。

出于这个原因,销售过程中的票可以具有“可用”或“已售出”的状态(还有其他状态,但这些是重要的)。一张票也作为一种状态,就其 SOR 状态而言,它要么是“sor”,要么是“purchased”。

理论上,“sor”票可能是“available”或“sold”,购买的票也可能是“available”或“sold”。这两组状态几乎没有直接关系。据推测,一张“已售出”的票最终将成为“购买”,而一张“可用”的票将永远不会成功。就是这样。

那么我设计具有两个独立状态的对象是否正确?或者它是否应该只有一个包含上述所有内容的状态?什么是最佳实践?

附加:所以这是一个头颅破坏者,当我在等待对此的一些帮助时,我已经回到我的分析并且还有另一个奇怪的层。 “票”有称为“价格”的子对象,这说明有一张票可以以一种价格出售给成年人,以另一种价格出售给 child ,而以三分之一的价格出售给养老金领取者。

当票处于票级记录的“SOR”状态时,但是当它进入针对价格记录的“已购买”状态时,因为票可以有多个可能的价格,但当它被支付时,只有在一个级别支付(这与 field 容量等有关)。

同样,当门票“可用”时,它有多个可能的价格,但它是“出售”的,而不是“价格”,因为那是客户做出购买决定的时候,例如,一张成人票,两张 child 票。给定事件的门票可能完全由成年人购买,或者主要卖给 child ,显然通常介于两者之间,但与状态相关的信息发生在两个不同的对象中。这有什么不同吗?

最佳答案

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

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

比你在单一状态下得到的要干净得多,我猜它看起来应该是这样的
ticket:
      available_&_sor
      available_&_purchased
      sold_&_sor
      sold_&_purchased

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

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

关于object - 一个对象可以同时参与两个状态机吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2156360/

相关文章:

将 META 描述和 TITLE 传递给网站标题的 PHP 缓冲区

Javascript:将数组转换为对象的最佳方法是什么?

javascript - 具有默认 View 的 angular-ui/ui-router 父状态

python - 如何将 Tkinter 按钮状态从禁用更改为正常?

javascript - 单独 react native onPress TouchableHighlights 吗?

java - 如何检查 JDialog 状态

javascript - vue数据函数语法

ios - 访问 NSArray/UITableView 中的第一个对象

java - 将对象与 null 进行比较!

java - Flink 原始和托管声明。何时使用它们?