使用一个 class 来存储数据安全吗?

Is using one class to store data safe?

所以我在搜索有关将数据存储在一个 class 中的信息,并找到了 this。但是,这不是我要找的。我想知道的是这是否是不好的做法,是否会导致应用程序出现性能问题,或者是否有另一种方法可以做到这一点,等等……(我不是在 Android 上这样做) .

假设我有一个 class 存储 HashMap<Enum, Object> 并在我在 main.class 中创建 class 时初始化。

public Main() {
    // Creates the HashMap, initialized in the constructor 'MemoryContainer'
    MemoryContainer m = new MemoryContainer();
    m.getTestHash().put(SomeEnum.TEST, "Test"); // Using created HashMap
}

除了我每次使用它时都转换值之外,这会导致重大问题吗?如果是这样,还有其他选择吗?

我不会过多关注性能问题(当然,我不知道你的应用程序还做了什么或想做什么以及它是如何实现的)。

你首先应该看的是可变性——在你的例子中,没有什么能阻止我在运行时通过调用来改变配置 m.getTestHash().put(SomeEnum.TEST, "NotATestAnymore") - 这会立即改变每次使用该特定设置的行为。

我也不确定您为什么不直接使用直接提供(类型化)getter 的配置 class,如果您在应用程序启动时知道所有配置设置,一个构造函数包含所有设置。

您打算从外部源(例如文件)读取配置吗?

,

不会造成大问题。

此外,最好将这些变量(在您的情况下为 HashMap)与您的主要 class(包含您的应用程序逻辑)保持在不同的 class 中.

将静态值存储在 class 中没有错,但这不是一个好的做法。

要存储常量,您应该创建一个 interface,因为接口中的每个字段都已经是一个常量(public static final)。

更好的方法是将这些值存储在 properties files 中,并根据需要加载它们。 属性文件可以存储在外部,不知道您的源代码的人可以在需要时修改该属性文件。例如,您可以将数据库连接详细信息存储在属性文件中,如果服务器支持管理员确定数据库实例已关闭,he/she 可以编辑属性文件以将应用程序指向一个新实例。

最后,为了获得最大的灵活性,您根本不应将配置存储在应用程序中。它可以存储在 database like MySql 或像 Redis 这样的快速数据结构存储中。这将允许您的应用程序的多个实例共享配置数据,并且还允许您通过在数据库中修改它们来动态修改配置。

有时 Git repository 也用于存储此类数据(例如微服务)。 Git 存储库除了在所有实例之间共享外,还维护修改历史。