使用一个 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 存储库除了在所有实例之间共享外,还维护修改历史。
所以我在搜索有关将数据存储在一个 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 存储库除了在所有实例之间共享外,还维护修改历史。