对于简单的对象,通常很容易拥有一个“状态”属性,它是一个字符串并且可以存储在数据库中。例如,想象一个 User 类。它可能处于非活动、未验证和活动状态。这可以使用两个布尔值进行跟踪——“活动”和“已验证”——但它也可以使用简单的状态机从非活动转换为未验证到活动,同时将当前状态存储在该“状态”属性中。很常见,对吧?
然而,现在想象一个有几个布尔属性的类,更重要的是,可以有很多这些属性的组合。例如,可能损坏、丢失、停用、过时等的事物。现在,在单个“状态”属性中跟踪状态变得更加困难。我猜,这是一个非确定性有限自动机或状态机。我真的不想存储“inactive_broken”和“active_missing_outdated”等状态。
我想出的最好的方法是同时拥有“状态”属性并存储某种超状态——在这种情况下,“可用”与“不可用”——以及每个布尔值。这样我就可以在过渡时使用类似守卫的方法。
有没有其他人遇到过这个问题并想出一个很好的跟踪状态的解决方案?