我正在读取.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)将模型对象传递给inspect方法,例如private void inspectMainMode(Node mainNode, SimpleModel model);
。这样做的缺点是我必须将模型对象传递给许多方法,并且方法返回void =&gt;更难测试。
2)创建两个仅获取ValueX
/ ValueY
的方法,例如private ValueX getValueX(Node mainNode);
。缺点:如果方法必须做类似的事情,可能会有代码重复
你有什么建议来解决这个问题?
答案 0 :(得分:0)
恕我直言,如果唯一改变的是你必须返回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);
}
/* ... */
这样,代码的全局结构保持不变,测试方法的设计也是如此。