0

これはオープンなMVC関連の質問です。私は批評とアドバイスを探しています。GraphViewerクラスとGraphEditorViewerクラスの関係

短いバージョン: ViewAはModelAを表示するために使用されます。 012BModelBをModelBに拡張し、ViewBを使用してModelBを表示すると、ViewBはViewAから継承しますか?

背景:

Iは、頂点の配列とエッジの配列を含む、グラフクラスを作成しました。 各頂点は、整数データの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から継承されてはならない(理由を継承する):

  • すべてのModelAがModelBであるとは限らないが、ViewAを拡張するビューは、ModelAビューの特定のタイプであり、特定ではないModelBビューも使用できます。 012BViewBではModelBが必要なはずなので、ViewAを継承することはお勧めしません。
  • ただし、コンポジション(ViewBにはViewAがあります)を使用して、ModelBをModelAとしてレンダリングし、より特定の機能を使用して詳細を追加することができます。

    関連する問題