【发布时间】:2014-06-30 14:14:55
【问题描述】:
我目前正在使用您可以在工作中称为遗留代码的东西。我基本上有一个处理工作流的类,并且每次机器启动时只实例化一次。每次新用户使用这台机器并登录它时,都会启动一个新的“会话”,但我们保留这个类的相同实例。为了简单起见,我们假设这台机器是一台自助服务机器。
这基本上意味着每次新的用户会话开始时,我们都需要将所有流变量重置为默认值。
所以通常我会有实例/成员变量,例如:
boolean didUserPressYes;
boolean didUserTakeHisReceipt;
int numberOfInsertedItems;
然后是在流/用户会话开始时调用的 resetVars() 方法:
public void resetVars() {
didUserPressYes = false;
didUserTakeHisReceipt = false;
numberOfInsertedItems = 0;
}
通常我只会重新实例化此类并避免使用此 resetVars() 方法。不幸的是,我们被绑定到一个不允许我们这样做的框架,我们必须保持相同的类实例。
在我们的实际代码中,我们有大约 12 个这样的变量,而且几乎肯定会在未来添加更多。我可以看到在每个用户会话开始时这些变量没有正确重置为其默认值的错误的巨大潜力 - 特别是如果有人新进入项目并忘记将他的新变量添加到此 resetVars() 方法中。
为了解决这个问题,我创建了一个包含这些变量的 WorkflowVariables 类,并在适当的地方具有 getter 和 setter,以及一些小的实用程序方法。在每个用户会话开始时,我们只需重新实例化这个 WorkflowVariables 类,现在就可以知道所有变量都已恢复为默认值。无需担心某些实例变量不会被重置,因为我们只有一个:
private WorkFlowVariables workFlowVariables;
public void resetVars() {
workFlowVariables = new WorkFlowVariables();
}
但是,在阅读了一些“代码气味”之后,这似乎是所谓的“数据类”,并且实施起来是不好的做法。
在我的情况下,是否有人认为这是一个坏主意,或者这是否适合这种特定情况?也许有更好的方法来解决这个问题?如果我们保留多个实例变量,我是否过于担心潜在的错误?
提前致谢!
【问题讨论】:
-
我认为您的方法没有问题。我或多或少会做同样的事情。 Data Class 还不错,在 Java/.NET 程序和其他几个平台中随处可见。
标签: java design-patterns anti-patterns