Java 在计算软件系统中作为枚举维护一长串计算参数是否可行?
我目前正在用Java维护一个遗留计算软件系统。有数百种不同名称的计算,每种计算都有自己的参数集,其中大多数是指示一些附加子计算的标志。在内部,许多Java 在计算软件系统中作为枚举维护一长串计算参数是否可行?,java,enums,software-design,Java,Enums,Software Design,我目前正在用Java维护一个遗留计算软件系统。有数百种不同名称的计算,每种计算都有自己的参数集,其中大多数是指示一些附加子计算的标志。在内部,许多if条件由这些参数控制 目前数据库中有一个参数表,相应地Java代码库中有一个enum,如下所示: public enum Parameter { GO_TO_FLOW_A, GO_TO_FLOW_B, IN_EU_STYLE, IN_US_STYLE, ROUND //there are yet hun
if
条件由这些参数控制
目前数据库中有一个参数表,相应地Java代码库中有一个enum
,如下所示:
public enum Parameter {
GO_TO_FLOW_A,
GO_TO_FLOW_B,
IN_EU_STYLE,
IN_US_STYLE,
ROUND
//there are yet hundreds more enum elements
}
问题是参数表包含数百行,即所有计算都有数百个参数,而此枚举包含数百个元素。更糟糕的是,当向数据库中添加更多新参数时,相应的元素也必须添加到enum参数中
问题:有没有更好的解决方案来处理Java中的这么多参数?在这个用例中,enum
可能不是一个好的选择?因为您的软件设计为一个计算软件,所以不将这个“参数”作为enum是合理的。如果这样做,就会像您所说的那样,在数据库和代码之间添加一个隐式的耦合。问题更复杂,因为您有依赖于此枚举的内部流。如果要重新设计应用程序,可能需要花费一些额外的时间
在我看来,你必须思考:“这些计算行为中,哪些是你的计算中常见的?”,“哪些不是?”。之后,您将能够将常见行为提取到类或众所周知的设计模式中。您可以提取到其他类中的不同行为,其组织方式是,当您从数据库中检索“参数”时,您将能够动态选择执行您需要使用的某种计算的类/对象(例如,if等中的一种处理类型)-这里也许您可以使用策略模式。由于您的软件设计为计算软件,因此不将此“参数”作为枚举是合理的。如果这样做,就会像您所说的那样,在数据库和代码之间添加一个隐式的耦合。问题更复杂,因为您有依赖于此枚举的内部流。如果要重新设计应用程序,可能需要花费一些额外的时间
在我看来,你必须思考:“这些计算行为中,哪些是你的计算中常见的?”,“哪些不是?”。之后,您将能够将常见行为提取到类或众所周知的设计模式中。您可以提取到其他类中的不同行为,其组织方式是,当您从数据库中检索“参数”时,您将能够动态选择执行您需要使用的某种计算的类/对象(例如,if等中的一种处理类型)-这里您可以使用策略模式。这可能是主观的,但一般来说,将数据库复制为枚举是没有意义的
也许最好的做法是用常规类替换新参数,并让现有参数保持不变,以便逐步升级
如果可能的话,完全升级以消除枚举会更好,但这取决于可用的资源
问:有没有更好的解决方案来处理Java中的这么多参数?在这个用例中,枚举可能不是一个好的选择
是的,去掉enum
并使用常规类
类参数{
字符串名;
字符串值;
}
或者类似的。您没有说明如何使用enum,但我认为应该使用以下类似的方法:
Result calculate(List<Parameter> params) {
....
}
结果计算(列出参数){
....
}
这可能是主观的,但一般来说,将数据库复制为枚举是没有意义的
也许最好的做法是用常规类替换新参数,并让现有参数保持不变,以便逐步升级
如果可能的话,完全升级以消除枚举会更好,但这取决于可用的资源
问:有没有更好的解决方案来处理Java中的这么多参数?在这个用例中,枚举可能不是一个好的选择
是的,去掉enum
并使用常规类
类参数{
字符串名;
字符串值;
}
或者类似的。您没有说明如何使用enum,但我认为应该使用以下类似的方法:
Result calculate(List<Parameter> params) {
....
}
结果计算(列出参数){
....
}
非常感谢您的解释。数据库和代码之间的耦合非常有意义:)非常感谢您的解释。数据库和代码之间的耦合意义重大:)