我意识到(在SO上也读过其他帖子)在枚举常量中添加状态是不好的设计(或者更好的说在我的情况下也没有意义)。
尽管如此,我现在发现自己正处于需要与此相似的事情的情况下。
我正在编写的应用程序使用错误常量(枚举),我通过将它们添加到Map<Error, ErrorInfo>
来指示错误(注意这些不是应用程序错误,而是“错误”,它们是应用程序的一部分) )。
好吧 - 我现在意识到我实际上还需要为这些指示一个INFO,WARN,FATAL的ErrorLevel。
由于Error的ErrorLevel取决于它发生的上下文,我无法静态地将ErrorLevel分配给Error-enums,换句话说,Error.E1
可以是ErrorLevel.WARN
一次,但可能是ErrorLevel.FATAL
{1}}另一次。
我正在思考如何在我的设计中最好地融入这个ErrorLevel
,但到目前为止我所提出的只是介绍一个简单包装Error
的新课程。 ErrorLevel
并在Map
而不是Error
中使用它。
由于错误及其严重程度在我看来必须非常普遍,我相信有更聪明的方法可以做到这一点,所以我非常感谢您对如何更好地设计这一点的想法。
- 曲
答案 0 :(得分:2)
如果我正确地理解了你的问题,那么将一个过渡状态置于枚举中是行不通的。由于每个枚举类型只有一个实例,通过更改错误级别,您不仅会为正在评估的当前错误更改它,而且还会更改应用程序中相同类型的所有错误。
您写道,errorlevel取决于上下文,同时ErrorInfo描述了错误发生的上下文。如果你可以根据错误类型和上下文计算错误级别,我会建议一些静态方法
public static ErrorLevel getLevel(Error, ErrorInfo) {
//..
}
答案 1 :(得分:1)
我完全不同意将枚举状态添加到枚举总是糟糕的设计。枚举就像单身人士,只要在你的应用程序中使用有状态单例是有意义的,你就可以对枚举做同样的事情。与单身人士一样,我们必须牢记,状态变化具有相当全球性的影响。
当然,有状态枚举对您的情况没有帮助,因为您需要特定于上下文的错误级别。
作为替代方案,请考虑使用简单的多图:
Map<Context, Map<Error, ErrorLevel>> errors;
这个想法是为不同的上下文存储多个地图。因此,对于已知的上下文(我很快发明了一种类型......),您将获得特定于上下文的参数映射。