Design patterns 我应该在我的场景中使用哪种JavaEE模式?

Design patterns 我应该在我的场景中使用哪种JavaEE模式?,design-patterns,jakarta-ee,session-variables,Design Patterns,Jakarta Ee,Session Variables,我有一个应用程序,它在会话中将许多变量存储为属性。每次我需要一个属性时,我必须记住属性名的确切含义,并将其转换回其类型以使用它 我考虑使用一个对象来包含所有这些变量,并将其称为“SessionManager”,这样我只需要记住一个属性名,转换就不会失败 我想知道这是一种模式,还是存在类似或更好的现有模式?听起来您的会话需要某种缓存 您不得不知道属性名称。但是,对于每种对象类型,您可以使用专门的方法跳过铸造部分(理想情况下,除了基本体之外,您不会有很多不同的类型) 既然您提到JavaEE,我就选择

我有一个应用程序,它在会话中将许多变量存储为属性。每次我需要一个属性时,我必须记住属性名的确切含义,并将其转换回其类型以使用它

我考虑使用一个对象来包含所有这些变量,并将其称为“SessionManager”,这样我只需要记住一个属性名,转换就不会失败


我想知道这是一种模式,还是存在类似或更好的现有模式?

听起来您的会话需要某种缓存

您不得不知道属性名称。但是,对于每种对象类型,您可以使用专门的方法跳过铸造部分(理想情况下,除了基本体之外,您不会有很多不同的类型)

既然您提到JavaEE,我就选择一个实现以下操作的无状态bean 在接口中定义:

String getString(string fieldName);
int getInt(string fieldName);
DateTime getDateTime(fieldName);
...
object getObject(fieldName); // for special scenarios
void setInt(string fieldName, int value);
void setString(String fieldnName, String value);
...
在bean实现中,我将增加额外的灵活性:

定义两个实现前一个接口的类(除了bean类)。一个可以从内存中存储和读取值,另一个可以从数据库中存储和读取值。并添加一个策略模式,让您选择要使用的类(同样,因为您使用JavaEE,这可能是一个应用服务器变量)

总结起来:

创建一个公开所需类型的接口(以避免强制转换) 在EJB中实现所述接口 在您想要使用的不同数据存储区中实现所述接口 实现一个选择适当类的简单策略模式(不需要专用类,EJB中的switch语句就可以了)。 从代码中调用EJB客户机


希望对您有所帮助

这里有SessionScoped Bean,这可能是您需要的。这是spring的一个特点。不幸的是,我的应用程序使用struts这里有一个提示。会话中不应该有那么多属性。这就像有太多的全局变量(好吧,它们不是全局变量,但没有绑定到任何对象,所以它们有点依赖于您的上下文…)。不,这是CDI和JSF的一个特性(可能也是spring,我不太了解spring)——两者都实现了会话范围。在使用struts时,使用CDI