我目前正在重构一个库,供Java内部使用。
库接收XML文档,并返回Result数据结构。 鉴于:
处理文件的最佳架构是什么?
目前,它按以下方式处理(省略了无关的详细信息,更改了类的名称):
public class ILuvUsers {
public Result getResult(String path) {
return getResult(ElementsLoader.loadIntermediateType(path));
}
public Result getResult(InputStream stream) {
return getResult(ElementsLoader.loadIntermediateType(stream));
}
private Result getResult(IntermediateType itype) {
//... do stuff and return Result
}
}
public class ElementsLoader {
public static IntermediateType loadIntermediateType(final InputStream is) {
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
return doSomethingWithDocument(doc);
}
public static IntermediateType loadIntermediateType(final String path) {
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(path);
return doSomethingWithDocument(doc);
}
}
我需要在InputStream和String的每个类中创建重载的方式对我来说似乎是一个代码味道。 如果第二天我需要支持使用'文件'类型怎么办? 最好我想以某种方式自动支持DocumentBuilder的解析方法的每个重载。
由于这在Java中实际上是不可能的,而且这似乎是一个常见的案例,这个问题的最佳实践是什么?你有没有看到任何好的解决方案?
答案 0 :(得分:2)
这真的不是那么糟糕。域名有限,不会快速增长。
但是,您发现了一个需要为输入找到“最低公分母”的问题。
这通常是某种InputStream
。
如果有String
,您想要打开Stream
并使用Stream
Loader。
鉴于Stream
,你是金色的。
如果有File
,您需要打开Stream
并使用Stream
Loader。
这应该涵盖所有可能的基础,因为AFAIK你可以用几乎任何东西制作一个InputStream。