java - 仅使用类中的静态变量和静态方法来维护应用程序的状态

标签 java oop object static

我目前正在使用如下的类来维护应用程序状态。它只有静态变量和静态方法

public class MyAppSession{

private MyAppSession(){ // private constructor}

private static UserProfile userProfile;
private static Enum appsessionMode;
private static List<UserProfile> guests ;
private static String host ;

public static UserProfile getUserProfile() {
    return userProfile;
}
public static void setUserProfile(UserProfile userProfile) {
    MyAppSession.userProfile = userProfile;
}
public static Enum getAppsessionMode() {
    return appsessionMode;
}
public static void setAppsessionMode(Enum appsessionMode) {
    MyAppSession.appsessionMode = appsessionMode;
}

...... other getters and setters

我正在使用这些静态方法和变量维护应用程序的 session 。在我的应用程序中,我在许多类中使用这个类来识别应用程序的状态并处理业务逻辑。我还将根据用户操作更新 session 。

在我的代码审查 session 期间,我被要求删除静态,使其成为单例,并在所有依赖类中获取此对象的实例。

现在,在静态的邪恶方面,我知道很难 mock 这些。以及未释放的静态变量的不同内存分配。

我想了解处理此类情况的最佳方法是什么?对于上述场景来说,静态真的是杀伤力大吗?

最佳答案

虽然它可以进行讨论,并且取决于每个人自己的喜好,但我想说,最好的方法是使用依赖容器。它使测试变得更加容易,并且被认为是最佳实践。依赖容器遵循良好编程的伟大原则,是控制反转 (IoC) 的一种实现,其中依赖项的控制从一个被调用反转为一个调用。

<强> Singleton在某些方面, 被认为是一种反模式。它实际上污染了全局范围。我曾经在使用语言内置的静态标识符时遇到过同样的冲突,并且听到的一些事情改变了我的想法 - 不要使用它。您可以在没有静态标识符的情况下完成所有操作,并且做得更好。只有当你完全掌握它时 - 你才可以稀疏地使用它。

一个警告:如果您计划一个简单的项目,您可能不会使用依赖容器。您可以使用 Singleton、Registry、Multiton 甚至静态。但这些可能会成为大型系统的严重缺陷,因为它们是反模式。顺便说一句,您的静态实现实际上是某种单例的示例。

关于java - 仅使用类中的静态变量和静态方法来维护应用程序的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985713/

相关文章:

java - 用于检索最后执行的 SQL 语句的 DB2 系统运行时表

java - TDD 中的模拟值

Python 对象继承

python - 为什么函数可以改变外部的对象?

Java使用循环从数组中删除重复项

java - 将物体移动到一起

java - 扩展从 XML 模式生成的类是否安全?

c# - cSharp 中的对象创建程序集

java - 在java中将Object []转换为double []

java - 使用 Apache POI 导出数据时印度 (INR) 和美国 (美元) 的货币格式不起作用