为类提供不相交的功能

时间:2012-10-31 15:25:09

标签: c#

我正在撰写图表应用程序。我正在使用Zedgraph来显示2D图。在我的应用程序中,我需要显示大约8种不同类型的图表,每种图表都需要提供稍微不同的功能。

这里的问题,有时我会有一些大多数类都会使用的“基础”功能,有时我会“添加”一些类会使用的功能,有时候会混合使用这些功能。除此之外,图表中显示的数据也是不相交的,视觉外观也是不相交的。

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

  • 图表能够自动滚动(使用实时数据)
  • 图表能够放大水平方向
  • 图表能够放大垂直方向
  • 用户可以编辑图表中的点
  • 用户可以选择数据区域
  • 用户可以更改图表的比例
  • 图表能够“缩放以适应”
  • 能够使用一个,两个,三个或四个垂直轴
  • 能够显示图表叠加

将所有这些结合在一起,某些功能适用于所有图表,一些适用于图表的子集,一些适用于单个图表。目前,我看不到要实现的功能层次结构。

我当前的实现使用了一个基类(提供我可以清楚看到的全局功能),然后我在这个基类上有两个'forks',但我现在仍然坚持如何实现不相交< / strong>各个类的功能。我不能使用抽象类,因为有时我需要从多个类继承,但我不想提供接口,因为代码完全相同。

那么,我该怎么办?我是否可以使用扩展方法来启用特定功能?

1 个答案:

答案 0 :(得分:1)

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

我只是制作一个通用的“图表”用户控件并实现所有的功能。然后,对于每个功能,给它一个布尔属性来启用/禁用它。 (即IsHorizontalScrollableIsVerticalScrollableIsSelectionEnabledArePointsEditable)然后表单的每个实际实例只需要设置更一般的表单的适当属性以及实际数据为了它。