gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:23:52 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com