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呈現,並使用更多特定函數添加更多細節。