0

这是一个开放的MVC相关问题,我正在寻找批评和建议。GraphViewer类和GraphEditorViewer类之间的关系

简要版本: ViewA用于查看ModelA。 如果ModelB扩展ModelA并且ViewB用于查看ModelB,那么ViewB将继承ViewA?

背景:

我已经创建了一个图形类,含有顶点数组和边缘的阵列。 顶点每个都有一个n大小的整型数据数组。

我还为2d图形创建了一个GraphViewer类,它只为顶点绘制边和点的线。

现在我决定创建一个GraphEditor类,也就是与编辑功能的曲线图,例如它需要有方法和允许用户交互字段: 例如: selectVertex - 接受当前鼠标座标的方法和返回最接近该点的顶点,并且 selectedVertices - 选择的所有顶点的数组

我决定GraphEditor将从Graph继承。 由于GraphEditor仍然只是具有编辑功能的图形。

现在我想创建一个GraphEditorViewer,它需要绘制不同颜色的选定顶点(例如),我认为自从GraphEditor扩展Graph之后,或许GraphEditorViewer应该扩展GraphViewer,但是我发现情况并非如此,新类GraphEditorViewer不'查看'正则图。 所以我决定在GraphEditorViewer和GraphViewer之间使用'has-a'关系。这意味着我不得不公开许多与GraphViewer相关的渲染方法,所以我可以从新类中调用它们。

我想知道你是否会以不同的方式去做,你对我的选择有什么看法。

感谢

回答

0

这当然是可以讨论和主观意见的问题:

答:

如果ModelB延伸,从MODELA和ViewA(继承)用于查看MODELA,然后ViewB不应ViewA延伸(继承),原因:

  1. 不是每个MODELA是ModelB,延伸ViewA是特定类型的一个MODELA视图,而不是特定的图盟友ModelB视图。 然而,ViewB应该期待ModelB,所以在这种情况下不推荐继承ViewA。

但是,您可以使用组合(ViewB具有ViewA)关系并使用该关系将ModelB作为ModelA呈现,并使用更多特定函数添加更多细节。