2012-10-31 38 views
0

我目前正在編寫圖表應用程序。我正在使用Zedgraph來顯示二維圖。在我的應用程序中,我需要顯示大約8種不同類型的圖表,每個圖表需要提供稍微不同的功能。爲類提供脫節功能

問題在這裏,有時我有一些「基本」功能,大多數類將使用,有時我有「添加」功能,一些類將使用和其他時間混合這些混合。最重要的是,圖表中顯示的數據再次分離,並且視覺外觀也不相交。

考慮以下的功能,可應用於一個或多個圖表:

  • 能力圖表自動滾動(現場數據)
  • 能力圖表在水平方向上進行放大
  • 圖表能夠在垂直方向上放大
  • 用戶可以編輯圖表中的點的能力
  • 用戶選擇數據區域的能力
  • 能力爲用戶圖表
  • 能力改變圖表的刻度爲「放大,以適應」
  • 能力ahve一個,兩個,三個或四個垂直軸
  • 能力來顯示的圖覆蓋

帶來這一切在一起,一些功能適用於所有圖表,一些適用於圖表的一個子集,以及一些適用於各個圖表。目前我看不到要實現的功能層次結構。我現在的實現使用一個基類(以提供我可以清楚地看到的全局功能),然後我有兩個'叉'關閉這個基類,但我現在堅持在如何實現不相交功能在個人課上。我不能使用抽象類,因爲有時我需要從多個類繼承,但我不想提供一個接口,因爲代碼完全一樣。

那麼,我在這裏做什麼?我是否可以使用擴展方法來啓用特定的功能?

回答

1

鑑於你有很多方面的功能,他們看起來相當獨立(任何特定的圖表可能有任何子功能的集合,或接近它),而且在我看來,這些都是隨着時間的推移,應用程序可能會改變的事物類型,您可能希望花費一些前期時間來概括這一點,而不是在每個圖表的基礎上實施它們。

我只是做一個通用的「圖表」用戶控件,並實現全部的功能。然後,爲每個功能,給它一個布爾屬性來啓用/禁用它。 (即IsHorizontalScrollable,IsVerticalScrollable,IsSelectionEnabled,ArePointsEditable)然後,表單的每個實際實例只需設置更一般形式的適當屬性及其實際數據。

+0

+1謝謝,不是一個壞建議。是的,擴展方法可能不是正確的用法,因爲有些東西是互斥的,我也可以在屬性設置器中處理。 – Simon

+0

@Simon Yeah,總的來說,你應該從一個單獨的類開始,然後讓其他類使用它,它只會暴露它有能力的有限子集。有時候這並不可取,最好從共享子集開始並添加到其中,但由於事實上有很多選項的排列,而且許多不同的實例會添加不同的功能重疊,所以太難了。 – Servy