首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在内存中存储配置是否更具有性能和维护效率?

在内存中存储配置是否更具有性能和维护效率?
EN

Software Engineering用户
提问于 2018-11-20 06:40:51
回答 3查看 337关注 0票数 -3

我的队友有一个包含大量Strings的类:

代码语言:javascript
运行
复制
public class Config {

    /**
     * List of status
     */
    public static final String IN = "bla*";
    public static final String LUNCH = "bla*";
    public static final String OUT = "*bla";
    public static final String MEETING = "*bla";
    public static final String COFFEE = "*bla";

    public static final String ON_BREAK = "bla*";
    public static final String WORKING = "bla*";
    public static final String ON_MEETING = "bla*";
    public static final String IDLE = "bla*";


}

以上只是一个样本。它还包含Strings of URLsStrings of D4语句。

有什么更好的方法来储存它们?

作为重构过程,我最初所做的是将所有的URL存储在一个application.properties文件中。然后,我通过Spring的@ConfigurationProperties访问它们。(有些URLs有令牌)

正如你在上面看到的,还有一个状态列表,它是由平均2-10个字母组成的。我决定创建一个包含这些值的Status枚举。

我做的对吗?还是应该全部存储在json/csv中?

不过,我主要想知道在哪里存储URLs。我们使用的是7-10 URLs.(据说这是我们调用的微服务,我对此并不了解,因为我还没有多少编程经验。)

注意:我不是在说哪种代码会更好,而是想知道一种方法是否比另一种更有效。是的,可能是基于个人品味。但是性能结果和未来的维护可以说不是这样。

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2018-11-20 09:12:30

我不是在说哪种代码会更好,而是想知道一种方法是否比另一种更有效。

那么你说的是错误的东西。

无论以任何方式,<#>The的性能都不重要。

也就是说,除非您做了一些愚蠢的事情,比如将其存储在文件或数据库中,并在每次需要配置选项时从那里读取。那就不好了。

如果您不搞砸它,配置将从存储的任何地方读取一次,然后保存在内存中。

是的,可能是基于个人品味。但是性能结果和未来的维护可以说不是这样。

维护是关于什么代码会更好,这真的很重要。

什么是更好的取决于如何使用这些字符串,以及它们需要更改的频率:

  • 对于服务的URL,将它们保存在一个单独的属性文件(或者JSON,YML )中是个很好的主意(尽管有注释并不重要),因为这样即使没有编码经验的人也可以在不重新构建应用程序的情况下对它们进行更改。
  • 对于将出现在UI上的String,单独的文件也很好,因为这样可以更容易地进行翻译、拼写检查、一致性检查或类似的事情。
  • 一个固定的状态列表肯定应该是一个枚举,为了类型安全,并明确什么是和不是一个可能的状态。
  • 实际上只在代码中使用的字符串,并且可能只在发生代码更改时才会更改的字符串不应该放在属性文件中--这样的"软编码“只会造成维护问题。
票数 4
EN

Software Engineering用户

发布于 2018-11-20 07:02:33

当您需要发送固定大小的数据和大量数据时,请使用平面文件。如果有一些不同的字段,您可以考虑添加空格来填充其余部分,但在一天结束时,平面文件必须具有固定的长度。

然而,也许你也在处理描述。描述不仅各不相同,而且在许多情况下,您无法保证描述的最大长度。在这种情况下,假设您有许多行,您应该考虑使用csv文件,因为它允许您定义字段屏障。只是不要犯这样的错误:假设描述不能包含用作csv中使用的屏障的字符。选择一个不太可能被使用的字符,并在csv中使用的字段中替换该字符,以避免稍后手工解析它的繁重任务。

在我看来,属性文件是当您有键和值时保存值的一个很好的方法。尽管与平面文件和csv不同,您可能不会节省很多行。在保存配置时使用属性文件,就像在您的情况下一样。这对URL来说很好。在属性文件中,第一个"=“字符是将键与值分隔开的字符(实际上,如果要将"=”字符作为键的一部分,则必须转义它)。这就是说,即使您的URL包含等号,您也不会遇到任何问题。

要构造属性,可以考虑先添加前缀,例如:

代码语言:javascript
运行
复制
config.username=john.smith@pilgrims.com
config.password=iheartturkey

您可以通过添加更多前缀以更好地组织来进一步嵌套属性。

我学到的一个技巧是在行的末尾使用\字符来表示多行属性。我发现这对于保存整个程序中使用的SQL查询是非常有用的,因为它允许我在生产中遇到问题时更改它,而且它看起来比在代码中硬编码查询要干净得多。只需确保\字符是行上的最后一个字符,否则它将被解释为一个简单的\字符,您的下一行将被解释为它自己的键/值行,而不是继续。

如果结构至关重要,您可以考虑使用更适合于数据结构的格式。因此,YAMLJSON都是很好的选择。如果您正在用Java编程,默认的情况是使用属性文件,但不觉得有必要使用它们。

关于使用枚举来表示数据,如果您期望预先设置一个可能值的列表,这是一个很好的主意。如果你击中了你不期望的数据,它就会失败,这是一件好事,信不信由你!它允许您在一开始就保证您的数据是您所期望的。

祝好运!

票数 1
EN

Software Engineering用户

发布于 2018-11-20 08:32:05

我的经验告诉我,服务/apis的URI应该在一个配置文件中,这个文件允许构建配置转换,因为dev将不会与生产过程中使用相同的实例,对吗?

如果需要,可以在类中使用属性,但原始值将位于配置中。

对于大量“状态”类型值..。“魔法字符串”被认为是糟糕的实践,但在现实世界中,通常仍然存在着遗留集成的目的。最好是维护代码,不要依赖神奇的字符串来避免错误风险。是否最好有一个可能值的Enum,但也有一个静态字典或查找表,以便在需要时交叉引用该遗留/显示原因?(确切的解决方案将取决于您的上下文)

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/381747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档