如何防止在更新接口后更新所有实现类?

时间:2012-12-07 12:16:38

标签: c# interface

我们有一个WPF应用程序,它主要是一个图表应用程序。大约有30个图表。每个图表在数据库中都有自己的表,该表保存图表的配置信息。每个图表在应用程序中都有一个类,其中包含与图表相关的配置信息。

我们的应用程序(IChartConfiguration)中有一个界面,每个图表配置类都实现了该界面。它允许应用程序以一致和类似的方式使用任何特定的图表配置。

我们遇到的“问题”是,每次我们需要向接口添加属性时,对于添加我们尚未处理的新配置属性的新图表,我们必须返回到每个图表配置class,它还没有实现这个新属性(通常是大多数)并添加它。满足接口实现。这不是一个巨大的负担,但在我看来,必须有一个更好的方法来解决这个问题。

有没有更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:5)

您的问题出在其他地方,您遇到的“有问题”行为根本不存在问题。 这是接口的预期用途。通过实现您正在声明的接口,“此类支持此接口”。如果您不会更新实现该界面的所有类,则您不再支持此合同。

您应该问自己的主要问题是您刚添加的配置属性是否适用于其他图表。如果不是,则不应在一个公共接口中指定。

只有几个值得探索的选择:

  • 拥有一个主界面并扩展其他界面。
  • 具有常见实现的抽象类。
  • 跨多个界面划分行为。

如果不确切知道图表之间的差异,我不能推荐任何一种方法作为最佳方法。

答案 1 :(得分:1)

在我对接口的理解中,这正是接口用于的内容。所以不,我不认为您可以通过实施IChartConfiguration来阻止这种情况。

但是,您可能可以将IChartConfiguration拆分为几个较小的接口,并仅实现与特定图表类匹配的接口。

答案 2 :(得分:1)

试试这个架构:

interface IChart
{
    string newProperty { get; set; }
}

abstract class BaseChart : IChart
{
    public virtual string newProperty
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }
}

class Chart1 : BaseChart
{
    private string _newProperty;
    public override string newProperty
    {
        get
        {
            return _newProperty;
        }
        set
        {
            _newProperty = value;
        }
    }
}

class Chart2 : BaseChart
{

}

然后,当向其中一个图表添加新属性时,您将需要仅在您的界面和抽象类中添加它。其他图表将不受影响。