我正在读取.xml文件,并尝试解析数据。目的是简化数据。输入可能看起来像这样(ValueX
/ ValueY
比简单的字符串复杂得多,例如它可能是对xml文件其他部分的引用):
<node>
<name>rootNode</name>
<node>
<name>Main</name>
<node>
<name>Child1</name>
<valueX>abc</valueX>
<valueY>def</valueY>
</node>
</node>
</node>
我当前的方法如下所示:
class Parser {
public SimpleModel parse(Node rootNode) {
Node mainNode = getMainNode(rootNode);
ValueX valueX = inspectMainNode(mainNode);
SimpleModel model = new SimpleModel();
model.setValueX(valueX);
return model;
}
private ValueX inspectMainNode(Node mainNode) {
ValueX valueX = /* acquire the value */
return valueX;
}
/* ... */
}
如果还需要
ValueY
,我应该如何重构该代码?目前,我能想到的最好的事情是以下两种解决方案:
1)将模型对象传递给检查方法,例如
private void inspectMainMode(Node mainNode, SimpleModel model);
。缺点是我必须将模型对象传递给许多方法,并且这些方法返回void =>更难测试。2)创建两个仅获取
ValueX
/ ValueY
的方法,例如private ValueX getValueX(Node mainNode);
。缺点:如果方法必须做类似的事情,可能会有代码重复您会提出什么解决方案?
最佳答案
恕我直言,如果唯一改变的是您必须返回2个值(或n> = 2),请创建一个包含两个(n)值的类,然后返回该类的实例:
class Values {
ValueX valueX;
ValueY valueY;
// constructors, setters, getters, equals and hashcode ommitted for brevity ...
}
...
private ValueX inspectMainNode(Node mainNode) {
ValueX valueX = /* acquire the value */
ValueY valueY = /* acquire the value */
return new Values(valueX, valueY);
}
/* ... */
这样,您的代码的全局结构将保持不变,测试方法的设计也将保持不变。
关于java - 如何解析树状组织的数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24733695/