首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下层计数与明示性

下层计数与明示性
EN

Software Engineering用户
提问于 2016-03-02 06:24:25
回答 1查看 150关注 0票数 2

为了帮助应用程序从XML结构中操作和工作以生成其他信息,我创建了一个与XML结构密切相关的类结构。

因此,XML是:

代码语言:javascript
复制
<document>
  <group attr1="thing">
    <title>Some group of things</title>

    <information>
      <content />
    </information>

    <detail attr2="flame">
      <title>Some detail</title>

      <content />
    </detail>

    <subgroup attr1="invisible">
      <title>A subgroup</title>

      <information>
        <content />
      </information>

      <detail attr2="mister">
        <content />
      </detail>
    </subgroup>

    ...
  </group>

  <group>
    <title>...</title>

    <information>
        <content />
    </information>

    <reference ref="elsewhere" />

    ...
  </group>

  ...
</document>

<reference>元素是从不同组/子组中匹配的<detail>中提取出来的特例。

我已经为节点确定了一个标准接口:

代码语言:javascript
复制
interface iNode {
    getTitle();
    getAttr();
    getInformation();
    getNodes();
}

然后在以下四个类中实现,并在解析文档时使用工厂确定要使用哪个类来表示特定的XML DOM节点:

代码语言:javascript
复制
class NodeGroup implements iNode {
    getTitle()        : return <title>
    getAttr()         : return @attr1
    getInformation()  : return <information>
    getNodes() : return <detail> | <subgroup> | <reference>    
}

class NodeSubGroup implements iNode {
    getTitle()        : return <title>
    getAttr()         : return @attr1
    getInformation()  : return <information>
    getNodes() : return <detail> | <subgroup> | <reference>    
}

class NodeDetail implements iNode {
    getTitle()        : return <title>
    getAttr()         : return @attr2
    getInformation()  : return child::*[not <title>]
    getNodes() : return none
}

class NodeReference implements iNode {
    getTitle()        : return (NodeDetail:getTitle())
    getAttr()         : return (NodeDetail:getAttr())
    getInformation()  : return (NodeDetail:getInformation())
    getNodes() : return none
}

现在,很明显,NodeGroup和NodeSubGroup有相同的实现-所以我想我可以创建一个带有公共实现的超类。甚至NodeDetail也可以扩展这个超类,因为它以相同的方式实现了getTitle() (并覆盖了其他三个方法)。

完成了这些之后,我现在有了5个类和3个实现(因为NodeGroup和NodeSubGroup只是现在不覆盖任何东西的瘦子类)。

我的问题是--我是把它分成3个类,让工厂实例化<group><subgroup>的超类,还是保留所有5个类,使超类变得抽象,从而在类和XML节点类型之间存在明确的一对一关系?

抱歉--为了避免在实现方面陷入困境,我可能对这里的类示例进行了过度简化。我试图关注是否应该为5种节点类型设置5个类--特别是当两个节点类型表现出与任何需要使用它们的行为相同的时候。使用交互这个词(虽然在我的应用程序中很有意义)也是一个糟糕的选择。

这些类中的每一个都指示XML解析器如何从对象表示的节点的文档中获取我想要的相关信息。其中一些类还操作解析器检索的信息。

EN

回答 1

Software Engineering用户

发布于 2016-03-03 18:32:35

在我看来,您可以为您的类使用复合图案

在上面的图表中,CompositeNodeGroup的同义词。它也可以用于在XML内容中看到Subgroups的地方。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/311556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档