用于处理大型 XML 的 Java OO 设计

标签 java oop

我们正在设计一个处理 XML 消息的系统。

处理 Java 类需要从较大的 XML 中分离出各种属性和值,并将它们作为参数传递给各个处理程序类以进行各种操作。

我们考虑了以下选项:

一个)

将整个 XML 传递给每个处理程序并让它提取相关位 - 但感觉每次都传递 XML 可能效率低下

B)

将 XML 转换为一个 DTO 或一组较小的 DTO,并将每个 DTO 传递给相关的处理程序

C)

将 XML 切割成片段并将它们传递给每个处理程序方法

我们对其中的每一个都不满意,所以有什么建议可以走吗?

示例 XML

 <IdAction>supplied</IdAction>
    <RegId>true</RegId>
    <DeRegId>false</DeRegId>
    <SaveMessage>false</SaveMessage>
    <ServiceName>abcRequest</ServiceName>
    <timeToPerform>3600</timeToPerform>
    <timeToReceipt/>
    <SendToBES>true</SendToBES>
    <BESQueueName>com.abc.gateway.JMSQueue.forAddRequest</BESQueueName>
    <BESTransform/>
    <BESJMSProperties>
        <property>
            <propName>stateCode</propName>
            <propValue>OK</propValue>
        </property>
    <property>
            <propName>stateResponse</propName>
            <propValue>OK</propValue>
        </property>
    </BESJMSProperties>

这包含由 4 个处理程序处理的 4 个 block

 <IdAction>supplied</IdAction>
    <RegId>true</RegId>
    <DeRegId>false</DeRegId>

另一个做

<timeToPerform>3600</timeToPerform>
    <timeToReceipt/>

接下来做

<SendToBES>true</SendToBES>
    <BESQueueName>com.abc.gateway.JMSQueue.forAddRequest</BESQueueName>
    <BESTransform/>
    <BESJMSProperties>
        <property>
            <propName>stateCode</propName>
            <propValue>OK</propValue>
        </property>
    <property>
            <propName>stateResponse</propName>
            <propValue>OK</propValue>
        </property>
    </BESJMSProperties>

等等

最佳答案

B 听起来是我的最佳选择。 A 效率最低,C 可能需要一次通过来解析它并挑选出片段,然后进行第二次通过才能正确处理它们?

使用 SAX 解析出最小的 DTO 集以传输到专用处理程序类。

好问题,顺便说一句。最好提前考虑这些事情,并获得第 2、第 3、第 4 意见:-)

关于用于处理大型 XML 的 Java OO 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7011558/

相关文章:

java - H2 DB 运行脚本错误

javascript - 在 JavaScript 中将变量分配给函数与在 C# 中使用委托(delegate)之间有区别吗

c# - 在使用后立即在 WCF ChannelFactory<T> 和 T channel 对象上调用 dispose 有多重要?

c# - 没有给出与 'firstName' 所需的形参 'Person.Person(string, string)' 相对应的参数

java - 在 cassandra 中管理多个数据中心集群

java - 当字段由字符串名称引用时,如何获取通用对象上字段的类

java - MapReduce 将数据集拆分为列

java - jd-intelliJ调试反编译代码的方法

C++类派生与超构造函数混淆

c# - 选角问题 |我正在尝试返回类似的类型