【问题标题】:How do i indicate differences in this situation?在这种情况下,我如何表示差异?
【发布时间】:2009-06-22 01:18:42
【问题描述】:

我正在为 2D 场景图构建代码,并且我有一个抽象类 Node,它将用于指示可以在场景图中使用的项目类型。但是,由此实现的类具有不同的类型,例如叶节点和转换节点。我将如何指出这些差异?我会使用属性、其他接口还是什么?

编辑:看来我提供的信息不足。以下是我可以提供的关于我当前层次结构的尽可能多的信息:

  • INode 接口
    • 需要一个名为 TransformationMatrix 的矩阵
    • 需要一个名为 Children 的 INode 列表
    • 需要一个名为 Parent 的节点
    • 要求实现一个名为 Draw 的方法,该方法接受一个 Matrix 作为参数并且不返回任何内容
  • 节点类
    • 实现 INode 接口
    • Draw 调用(带有 1 个矩阵类型参数的虚拟 void)只调用每个子 INode 的 Draw 方法。
  • 从 Node 派生的各种类
    • 这些是实际节点,可以是转换节点、叶节点等。

【问题讨论】:

  • 这似乎表明我应该使用属性(我试图指出派生类是什么类型的节点),但我并不完全相信这是最好的选择。
  • 节点的类型是关于类机制的事实,还是关于类用于表示什么的事实?
  • 关于类被用来表示什么的事实。
  • 那么我会避免使用属性。使用属性来描述关于本身的事实,例如“这个类可以将它的状态序列化到磁盘”,或者“这个类不应该出现在调试器中”。属性告诉您用于实现概念的机制,而不是概念本身。

标签: c# oop scenegraph


【解决方案1】:

由于您没有向我们提供有关您的问题域的太多信息,因此很难向您提供建议。此外,您还混合了一些术语,所以我不清楚您是否将叶节点和转换节点视为接口、抽象类或类。

我想就设计而言,您需要问自己叶节点与转换节点的区别。如果它只是纯粹的节点的属性,那么也许使用属性可能是最优雅的解决方案,但如果它们具有不同的行为,那么它会将我指向单独的类。

根据名称,我们可以假设转换节点是“可转换的”,因此具有“转换”方法,但叶子节点不可转换。那么我建议叶节点最好不要有转换方法并且属于不同的类。

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多