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