首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个对象可以同时参与两个状态机吗?

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

Stack Overflow用户
提问于 2010-01-29 01:02:56
回答 2查看 143关注 0票数 3

我正在写一个面向对象的程序,它的业务流程需要一个“票证”对象。"ticket“对象有两种作用。它是要出售的股票,也是我们自己持有的股票,要么是以出售或回报的方式持有,要么是承诺购买。

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

从理论上讲,"sor“车票可以是”可用“或”已售出“,购买的车票也可以是”可用“或”已售出“。这两组状态几乎彼此没有直接关系。据推测,一张“已售出”的门票最终会变成“已购买”,而一张“可用”门票永远不会出现。事情就是这样。

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

补充:这是一个令人头疼的问题,当我在等待一些帮助的时候,我又回到了我的分析上,这又是一个奇怪的层次。“门票”有称为“价格”的子对象,这说明了一张票可以以一种价格卖给成年人,以另一种价格卖给儿童,以第三种价格卖给领取养老金的人。

当门票处于"SOR“状态时,这是在门票级别记录的,但当它进入”已购买“状态时,会根据价格记录下来,因为一张门票可以有多个可能的价格,但当它被支付时,只在一个级别支付(这与场地容量等因素有关)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-29 01:13:14

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

代码语言:javascript
复制
ticket:
   availability: available or sold
   sor: sor or purchased

比单一状态要干净得多,我猜它看起来像是

代码语言:javascript
复制
ticket:
      available_&_sor
      available_&_purchased
      sold_&_sor
      sold_&_purchased

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

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

票数 1
EN

Stack Overflow用户

发布于 2010-01-29 01:17:17

如果两个轴上的行为是独立的(特别是如果存在行为重叠的可想而知的子类型或变体对象),那么票证保留两个状态对象并在单独状态对象的行为基础上构建其行为可能是有意义的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2156360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档