使用一个类来保存数据安全吗?

时间:2017-07-28 12:59:39

标签: java data-storage

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

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

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

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

3 个答案:

答案 0 :(得分:0)

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

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

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

您是否计划从外部来源(例如文件)中读取配置?

答案 1 :(得分:0)

它不会引起重大问题。

此外,最好将这些变量(在您的情况下为HashMap)保留在远离主类(包含应用程序逻辑)的不同类中。

答案 2 :(得分:0)

在类中存储静态值没有任何问题,但这不是一个好习惯。

要存储常量,您应该创建一个interface,因为接口中的每个字段都已经是常量(公共静态最终)。

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

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

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