我的队友有一个包含大量Strings
的类:
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 URLs
和Strings
of D4
语句。
有什么更好的方法来储存它们?
作为重构过程,我最初所做的是将所有的URL存储在一个application.properties
文件中。然后,我通过Spring的@ConfigurationProperties
访问它们。(有些URLs
有令牌)
正如你在上面看到的,还有一个状态列表,它是由平均2-10个字母组成的。我决定创建一个包含这些值的Status
枚举。
我做的对吗?还是应该全部存储在json/csv中?
不过,我主要想知道在哪里存储URLs
。我们使用的是7-10 URLs
.(据说这是我们调用的微服务,我对此并不了解,因为我还没有多少编程经验。)
注意:我不是在说哪种代码会更好,而是想知道一种方法是否比另一种更有效。是的,可能是基于个人品味。但是性能结果和未来的维护可以说不是这样。
发布于 2018-11-20 09:12:30
我不是在说哪种代码会更好,而是想知道一种方法是否比另一种更有效。
那么你说的是错误的东西。
无论以任何方式,<#>The的性能都不重要。
也就是说,除非您做了一些愚蠢的事情,比如将其存储在文件或数据库中,并在每次需要配置选项时从那里读取。那就不好了。
如果您不搞砸它,配置将从存储的任何地方读取一次,然后保存在内存中。
是的,可能是基于个人品味。但是性能结果和未来的维护可以说不是这样。
维护是关于什么代码会更好,这真的很重要。
什么是更好的取决于如何使用这些字符串,以及它们需要更改的频率:
发布于 2018-11-20 07:02:33
当您需要发送固定大小的数据和大量数据时,请使用平面文件。如果有一些不同的字段,您可以考虑添加空格来填充其余部分,但在一天结束时,平面文件必须具有固定的长度。
然而,也许你也在处理描述。描述不仅各不相同,而且在许多情况下,您无法保证描述的最大长度。在这种情况下,假设您有许多行,您应该考虑使用csv文件,因为它允许您定义字段屏障。只是不要犯这样的错误:假设描述不能包含用作csv中使用的屏障的字符。选择一个不太可能被使用的字符,并在csv中使用的字段中替换该字符,以避免稍后手工解析它的繁重任务。
在我看来,属性文件是当您有键和值时保存值的一个很好的方法。尽管与平面文件和csv不同,您可能不会节省很多行。在保存配置时使用属性文件,就像在您的情况下一样。这对URL来说很好。在属性文件中,第一个"=“字符是将键与值分隔开的字符(实际上,如果要将"=”字符作为键的一部分,则必须转义它)。这就是说,即使您的URL包含等号,您也不会遇到任何问题。
要构造属性,可以考虑先添加前缀,例如:
config.username=john.smith@pilgrims.com
config.password=iheartturkey
您可以通过添加更多前缀以更好地组织来进一步嵌套属性。
我学到的一个技巧是在行的末尾使用\字符来表示多行属性。我发现这对于保存整个程序中使用的SQL查询是非常有用的,因为它允许我在生产中遇到问题时更改它,而且它看起来比在代码中硬编码查询要干净得多。只需确保\字符是行上的最后一个字符,否则它将被解释为一个简单的\字符,您的下一行将被解释为它自己的键/值行,而不是继续。
如果结构至关重要,您可以考虑使用更适合于数据结构的格式。因此,YAML和JSON都是很好的选择。如果您正在用Java编程,默认的情况是使用属性文件,但不觉得有必要使用它们。
关于使用枚举来表示数据,如果您期望预先设置一个可能值的列表,这是一个很好的主意。如果你击中了你不期望的数据,它就会失败,这是一件好事,信不信由你!它允许您在一开始就保证您的数据是您所期望的。
祝好运!
发布于 2018-11-20 08:32:05
我的经验告诉我,服务/apis的URI应该在一个配置文件中,这个文件允许构建配置转换,因为dev将不会与生产过程中使用相同的实例,对吗?
如果需要,可以在类中使用属性,但原始值将位于配置中。
对于大量“状态”类型值..。“魔法字符串”被认为是糟糕的实践,但在现实世界中,通常仍然存在着遗留集成的目的。最好是维护代码,不要依赖神奇的字符串来避免错误风险。是否最好有一个可能值的Enum,但也有一个静态字典或查找表,以便在需要时交叉引用该遗留/显示原因?(确切的解决方案将取决于您的上下文)
https://softwareengineering.stackexchange.com/questions/381747
复制相似问题