Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java应用程序中的全局映射_Java_Unit Testing_Design Patterns_Tdd_Application Design - Fatal编程技术网

Java应用程序中的全局映射

Java应用程序中的全局映射,java,unit-testing,design-patterns,tdd,application-design,Java,Unit Testing,Design Patterns,Tdd,Application Design,我想知道在Java应用程序中进行全局映射的最佳实践是什么 假设我有一个带有映射的文本文件: key1:value1 key2:value2 ... keyN:valueN 文件很大,键和值都是任意的,所以我不能真正使用Enum 在Java应用程序中,我将实例化一组以键作为输入的类(请注意,代码在现实中更合适,只是尝试将其抽象和简单): 我希望我的代码简单,重要的是,可以测试。避免使用Spring之类的框架 到目前为止,我想到的是:创建一个Holder类,它只是HashMap的一个包装器,包含其

我想知道在Java应用程序中进行全局映射的最佳实践是什么

假设我有一个带有映射的文本文件:

key1:value1
key2:value2
...
keyN:valueN
文件很大,键和值都是任意的,所以我不能真正使用Enum

在Java应用程序中,我将实例化一组以键作为输入的类(请注意,代码在现实中更合适,只是尝试将其抽象和简单):

我希望我的代码简单,重要的是,可以测试。避免使用Spring之类的框架

到目前为止,我想到的是:创建一个Holder类,它只是HashMap的一个包装器,包含其他初始化方法:

class MappingHolder {

private Map<String, String> keyValueMap = new HashMap();

public MappingHolder(String filePath){
    keyValueMap = ...; //init from the file
}

public MappingHolder(Map initMap) { //constructor useful for testing
    keyValueMap = initMap; 
}

public String get(String key) {
   return keyValueMap.get(key);
}
  • 将MappingHolder#getValue作为实例方法,但 SomeClass中MappingHolder static类型的字段

    public class SomeClass {
    ...
    private static MappingHolder mappingHolder = new MappingHolder();
    private String getValue() {
       return mappingHolder.getValue();
    }
    
  • 使mappingholder成为一个单身汉

    public class SomeClass {
    ...
    private MappingHolder mappingHolder = MappingHolder.getInstance();
    private String getValue() {
       return mappingHolder.getValue();
    }
    
  • 在我看来,这两者都不可测试,只有JUnit和Mockito,没有利用一些更强大的模拟框架。虽然我在测试中很糟糕,也许我错了


    因此,如果有人能推荐这种方法,无论是如何进一步发展我自己的方法,还是我可能缺少的更好的方法,那就太好了。谢谢

    您的类
    MappingHolder
    在JRE中有一个实现,名为。它还可以从
    .properties
    .xml
    文件加载映射,并且可以链接在一起…@UsagiMiyamoto,的确如此!但是这个类似乎强加了它自己的XML格式,而我必须使用外部分层XML格式,实际上它不包含字面上的键值,而是需要从结构中推断它们。我将编辑后,使这一部分更清楚。
    public class SomeClass {
    ...
    private String getValue() {
       return MappingHolder.getValue()
    }
    
    public class SomeClass {
    ...
    private static MappingHolder mappingHolder = new MappingHolder();
    private String getValue() {
       return mappingHolder.getValue();
    }
    
    public class SomeClass {
    ...
    private MappingHolder mappingHolder = MappingHolder.getInstance();
    private String getValue() {
       return mappingHolder.getValue();
    }