Java 何时使用枚举以及何时使用实体来处理域状态?

Java 何时使用枚举以及何时使用实体来处理域状态?,java,hibernate,jpa,solid-principles,Java,Hibernate,Jpa,Solid Principles,我需要处理应用程序中某些实体(域)的不同状态。因此,在流程(服务)执行期间,它们可能会从一种状态更新到另一种状态,即: open->pending 挂起->错误 pending->success 我的第一种方法是创建一个ENUM类。然而,这个解决方案打破了开/关原则,因为将来可能会出现新的状态,我需要调整ENUM类 另一种方法是创建一个具有不同状态的表,但我不确定如何以正确的方式实现此解决方案 什么时候一个解决方案比另一个好?有比我在这里介绍的更好的方法吗?使用类似枚举的EntityStatus

我需要处理应用程序中某些实体(域)的不同状态。因此,在流程(服务)执行期间,它们可能会从一种状态更新到另一种状态,即:

open->pending

挂起->错误

pending->success

我的第一种方法是创建一个ENUM类。然而,这个解决方案打破了开/关原则,因为将来可能会出现新的状态,我需要调整ENUM类

另一种方法是创建一个具有不同状态的
,但我不确定如何以正确的方式实现此解决方案


什么时候一个解决方案比另一个好?有比我在这里介绍的更好的方法吗?

使用类似枚举的EntityStatusEnum定义每个实体的固定有效状态列表是枚举的完美用法

如果您有许多不同的实体类型,那么可以通过使用公共接口来遵循打开/关闭主体,这样您就可以更改或更改它们的实现,而不会影响使用它们的代码


如果您的不同实体具有不同的有效状态组合,则更容易使用每种类型的特定枚举实现这一点,并避免尝试在不同实体之间共享公共枚举的(人为的)限制。e、 g.定义一个EntityAStatusEnum供EntityA使用,定义一个EntityBStatusEnum供EntityB使用。

我的问题不是这个。我只有一个(目前为D)实体具有此状态。我这里的问题是如何定义一个好的体系结构?如果为状态创建一个固定枚举类,并且应该添加一个新的状态,我需要修改这个枚举类->打开/关闭原则被违反。@lordneru这些状态代码是否经常更改,以至于您每周、每天都要对此代码进行更新?如果是这样,那么这听起来像是需要从代码外部化到另一个可配置源(如属性文件或数据库表)的配置元数据。然而,仔细考虑你试图解决的问题。如果您没有需要定期更改状态代码的问题,请不要尝试为该问题设计解决方案。不要解决你没有的问题。谢谢你的评论!这绝对是对的!我将把这些状态实现为ENUM。谢谢