4

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

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

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

有没有更好的方法来处理这个?

4

3 回答 3

5

您的问题出在其他地方,您遇到的“有问题的”行为根本没有问题。这是接口的预期用途。通过实现你所说的接口,'这个类支持这个接口'。如果您更新实现该接口的所有类,您将不再支持此合同。

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

只有几个值得探索的替代方案:

  • 拥有一个主界面并从中扩展其他界面。
  • 具有通用实现的抽象类。
  • 跨多个接口划分行为。

在不确切知道图表之间的差异的情况下,我不能推荐任何一种方法作为最好的方法。

于 2012-12-07T12:23:40.423 回答
1

在我对接口的理解中,这正是接口的用途。所以不,我不认为你可以通过实现 IChartConfiguration 来防止这种情况。

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

于 2012-12-07T12:23:43.427 回答
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
{

}

然后,当向其中一个图表添加新属性时,您只需将其添加到您的接口和抽象类中。其他图表将保持不变。

于 2012-12-07T12:29:07.007 回答