2012-10-31 34 views
0

我目前正在编写图表应用程序。我正在使用Zedgraph来显示二维图。在我的应用程序中,我需要显示大约8种不同类型的图表,每个图表需要提供稍微不同的功能。为类提供脱节功能

问题在这里,有时我有一些“基本”功能,大多数类将使用,有时我有“添加”功能,一些类将使用和其他时间混合这些混合。最重要的是,图表中显示的数据再次分离,并且视觉外观也不相交。

考虑以下的功能,可应用于一个或多个图表:

  • 能力图表自动滚动(现场数据)
  • 能力图表在水平方向上进行放大
  • 图表能够在垂直方向上放大
  • 用户可以编辑图表中的点的能力
  • 用户选择数据区域的能力
  • 能力为用户图表
  • 能力改变图表的刻度为“放大,以适应”
  • 能力ahve一个,两个,三个或四个垂直轴
  • 能力来显示的图覆盖

带来这一切在一起,一些功能适用于所有图表,一些适用于图表的一个子集,以及一些适用于各个图表。目前我看不到要实现的功能层次结构。我现在的实现使用一个基类(以提供我可以清楚地看到的全局功能),然后我有两个'叉'关闭这个基类,但我现在坚持在如何实现不相交功能在个人课上。我不能使用抽象类,因为有时我需要从多个类继承,但我不想提供一个接口,因为代码完全一样。

那么,我在这里做什么?我是否可以使用扩展方法来启用特定的功能?

回答

1

鉴于你有很多方面的功能,他们看起来相当独立(任何特定的图表可能有任何子功能的集合,或接近它),而且在我看来,这些都是随着时间的推移,应用程序可能会改变的事物类型,您可能希望花费一些前期时间来概括这一点,而不是在每个图表的基础上实施它们。

我只是做一个通用的“图表”用户控件,并实现全部的功能。然后,为每个功能,给它一个布尔属性来启用/禁用它。 (即IsHorizontalScrollable,IsVerticalScrollable,IsSelectionEnabled,ArePointsEditable)然后,表单的每个实际实例只需设置更一般形式的适当属性及其实际数据。

+0

+1谢谢,不是一个坏建议。是的,扩展方法可能不是正确的用法,因为有些东西是互斥的,我也可以在属性设置器中处理。 – Simon

+0

@Simon Yeah,总的来说,你应该从一个单独的类开始,然后让其他类使用它,它只会暴露它有能力的有限子集。有时候这并不可取,最好从共享子集开始并添加到其中,但由于事实上有很多选项的排列,而且许多不同的实例会添加不同的功能重叠,所以太难了。 – Servy