这是一个开放的MVC相关问题,我正在寻找批评和建议。
简要版本: ViewA用于查看ModelA。 如果ModelB扩展ModelA并且ViewB用于查看ModelB,那么ViewB会从ViewA继承吗?
背景:
我创建了一个Graph类,包含一个顶点数组和一个边数组。 顶点各有一个n大小的整数数组。
我还为2d-Graphs创建了一个GraphViewer类,它只是为顶点绘制边线和点的线。
现在我决定创建一个GraphEditor类,这是一个具有编辑功能的图形,例如它需要具有允许用户交互的方法和字段: 例: selectVertex - 一个接受当前鼠标坐标并返回最接近该点的顶点的方法,和 selectedVertices - 选定所有顶点的数组
我决定GraphEditor将继承自Graph。 因为GraphEditor仍然是仅具有编辑功能的图形。
现在我想创建一个GraphEditorViewer,它需要以不同的颜色绘制选定的顶点(例如)我想,因为GraphEditor扩展了Graph,也许GraphEditorViewer应该扩展GraphViewer,但是我发现不是这样的,因为新的GraphEditorViewer类不会“查看”常规图形。 所以我决定在GraphEditorViewer和GraphViewer之间使用'has-a'关系。 这意味着我必须公开很多与GraphViewer相关的渲染方法,以便我可以从新类中调用它们。
我想知道你是否会以不同的方式解决这个问题,你对我的选择有何看法。
由于
答案 0 :(得分:0)
这当然可以讨论,也可以是主观意见:
答案:
如果ModelB从ModelA扩展(继承)并且ViewA用于查看ModelA,那么ViewB不应该从ViewA扩展(继承),原因是:
但是,您可以使用合成(ViewB具有ViewA)关系,并使用它将ModelB渲染为ModelA,并使用更具体的函数添加其他详细信息。