继承层次结构 - 如何拆分类

时间:2011-04-06 08:36:45

标签: c# inheritance coding-style

我有一个为特定实体绘制图形的类,图形节点是可点击的,因此我有特定的方法使被点击的项目显示适当的信息。

由于这只是一个原型,我没有考虑其他实体 - 它们将有完全不同的节点点击。

我不确定如何使用继承我可以拆分它所以我有一个图形作为主类,并根据什么实体(绘制图形的类型)拆分点击项目的相关方法,以便它们被隔离到他们自己的空间?

例如,类型

的图表

Bannana - 具有可点击实体的皮肤,大小,颜色和数量

但是类型为

的图表

橙色 - 有颜色,片段,橙色,数量

任何想法,抱歉这个糟糕的例子:/

由于

下面我们有一个实体的xml文件,基于节点类型的层次结构是树的绘制方式。其他实体将以类似方式布局,但具有不同的价值。这有助于澄清问题吗?也可能值得一提的是,不同的实体会分享一些相同的项目,所以例如所有这些实体都有点击查看复合图像标签

<graph>
  <node label="Batch">
    <node label="Searched Batch">
      <node label ="a batch number" />
    </node>
    <node label="Compound Number">
      <node label ="a compound number" />
    </node>
    <node label="Parent Number">
      <node label ="a parent number" />
    </node>
    <node label="Chemist Name">
      <node label ="Name 1" />
    </node>
    <node label="Quantity Available">
      <node label ="N/A" />
    </node>
    <node label="Molecular Formula">
      <node label ="a molecular formula" />
    </node>
    <node label="Notebook Number">
      <node label="a notebook number" />
    </node>
    <node label="Analytical Images">
      <node label ="show some pdf files" />
    </node>
    <node label="Who has Registered Batches">
      <node label ="Name 1" />
      <node label ="Name 2" />
      <node label ="Name 3" />
      <node label ="Name 4" />
      <node label ="Name 5" />
    </node>
    <node label="Chemical Structure" >
      <node label="Click to view compound image" />
    </node>
  </node>
</graph>

3 个答案:

答案 0 :(得分:0)

好的,我将从基础Graph类开始。从那里我将为每个图表类型创建一个子类,每个类型都继承自基本Graph。基本Graph类几乎肯定会有一个方法Draw(),它将显示图形,这将被每个子类重写,允许每个图形独立绘制。在绘制每个图形时,您将使用适当的对象来表示图形及其所需的功能,在这里您可以改变节点类型。

看看ZedGraph,这是一个非常全面的图形/图表库,它是开源的,所以你可以在那里探索对象图,看看每种不同的图表类型是如何演变的。

答案 1 :(得分:0)

从图表的角度来看,我会使用一个界面来显示你想要在图表中显示的对象,这个界面应该以一种常见的方式公开图表的属性,例如:一个关键值对集合...

答案 2 :(得分:0)

我建议您查看Composite Visitor Pattern

当然,你不仅需要绘制这些东西,还要坚持图形,执行命令等。

如果您将逻辑放入类层次结构本身,它最终会变得越来越大,条件逻辑变得混乱,依赖于UI组件等。