単純なオブジェクトの場合、通常、文字列でデータベースに格納可能な「状態」属性を持つのは簡単です。たとえば、User クラスを想像してみてください。非アクティブ、未検証、およびアクティブの状態である可能性があります。これは、「アクティブ」と「検証済み」の 2 つのブール値で追跡できますが、単純なステート マシンを使用して、現在の状態をその「状態」属性に保存しながら、非アクティブから未検証、アクティブに遷移することもできます。非常に一般的ですよね?
ただし、さらにいくつかのブール属性を持ち、さらに重要なことに、それらの多くの組み合わせを持つことができるクラスを想像してみてください。たとえば、壊れている、欠落している、非アクティブ化されている、古くなっている可能性があるモノなどです。現在、単一の「状態」属性で状態を追跡することはより困難になっています。これは、おそらく、非決定性有限オートマトンまたはステート マシンです。「inactive_broken」や「active_missing_outdated」などの状態を保存したくありません。
私が思いついた最善の方法は、「状態」属性を持ち、ある種のスーパーステート (この場合は「利用可能」と「利用不可」)とそれぞれのブール値を格納することです。そうすれば、移行時にガードのような方法を使用できます。
他の誰かがこの問題に遭遇し、状態を追跡するための良い解決策を思いつきましたか?