【发布时间】:2022-01-23 09:05:26
【问题描述】:
我有一个用例,我必须解析 XML 文档并在内部模型 POJO Details 的相应字段中填写详细信息。
比方说,XML 如下所示 -
<?xml version="1.0" encoding="UTF-8"?>
...
<TagA>
<Child1>
...
</Child1>
<Child2>
...
</Child2>
</TagA>
...
<TagB>
<Child1>
...
</Child1>
<Child2>
...
</Child2>
</TagB>
....
内部模型 POJO 如下所示 -
public class Details {
...
Set<TagAInfo> tagAInformation;
Set<TagBInfo> tagBInformation;
...
}
XML 有多个字段,例如 TagAs、TagB 等。
当前实现: 所以目前有一个映射器/解析器类(比如说Mapper.java)在details 上调用多个方法,如mapTagAInfo(details, xmlRootElement)、mapTagBInfo(details, xmlRootElement) 等的Details.java) 类似以下 -
public class Mapper {
....
public Details mapInfo(XmlElement xmlRootElement) {
Details details = new Details();
mapTagAInfo(details, xmlRootElement)
mapTagBInfo(details, xmlRootElement)
mapTagCInfo(details, xmlRootElement)
....
return details;
}
private void mapTagAInfo(details, xmlRootElement) {
stp1: Extract <TagA> tag element info using a utility which reads the xml document
stp2: use the stp1 info and convert to internal model POJO TagAInfo and
add to details (details.addTagAInfo(tagAInfo))
}
问题:目前的实现让代码看起来很丑(就像在单个类中Mapper.java 发生了多件事),所以想知道我是否可以使用一些设计模式来改进代码 ?如果是这样,请建议使用哪种设计模式,并举例说明设计模式的使用会有很大帮助。
更新:该项目使用 Dom4j 读取 XML。此外,问题更多的是处理映射器类的职责。正如人们所看到的,它有很多功能,如 mapTagAInfo、mapTagBInfo 等。想知道我是否应该将职责委托给不同的类 - 例如。 TagAInfoEnricher、TagBInfoEnricher 等。如果是,那么该怎么做,使用什么设计模式等?
【问题讨论】:
标签: java design-patterns