4

主にグラフ作成アプリケーションである WPF アプリケーションがあります。チャートは約30枚。各グラフには、グラフの構成情報を保持するデータベース内に独自のテーブルがあります。各チャートには、チャートに関連する構成情報を含むアプリ内のクラスがあります。

アプリ ( IChartConfiguration) には、各チャート構成クラスが実装するインターフェースがあります。これにより、アプリは一貫した類似の方法で特定のチャート構成を操作できます。

私たちが抱えている「問題」は、インターフェイスにプロパティを追加する必要があるたびに、まだ扱っていない新しい構成プロパティを追加する新しいチャートの場合、各チャート構成クラスに戻る必要があることです。この新しいプロパティをまだ実装しておらず (ほとんどの場合)、それを追加します。インターフェイスの実装を満たすために。これは大きな負担ではありませんが、これに対処するためのより良い方法があるに違いないと私には思えます。

これを処理するより良い方法はありますか?

4

3 に答える 3

5

あなたの問題は他の場所にあります。あなたが経験している「問題のある」動作はまったく問題ではありません。これは、インターフェイスの使用目的です。あなたが述べているインターフェースを実装することにより、「このクラスはこのインターフェースをサポートします」。そのインターフェイスを実装するすべてのクラスを更新しない場合は、この契約を維持していません。

自問すべき主な質問は、追加したばかりの構成プロパティが他のチャートにとって意味があるかどうかです。そうでない場合は、1 つの共通インターフェイスで指定しないでください。

検討する価値のあるいくつかの代替手段:

  • 1 つのメイン インターフェイスを持ち、そこから他のインターフェイスを拡張する。
  • 共通の実装を持つ抽象クラス。
  • 複数のインターフェイスにまたがる動作の分割。

チャート間の違いが何であるかを正確に知らなければ、1 つのアプローチを最良として推奨することはできません。

于 2012-12-07T12:23:40.423 に答える
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
{

}

次に、チャートの 1 つに新しいプロパティを追加するときは、インターフェイスと抽象クラスにのみ追加する必要があります。他のチャートは変更されません。

于 2012-12-07T12:29:07.007 に答える
1

インターフェイスについての私の理解では、これはまさにインターフェイスが使用されるものです。いいえ、IChartConfiguration の実装でこれを防ぐことはできないと思います。

しかし、おそらく IChartConfiguration をいくつかの小さなインターフェイスに分割し、特定のチャート クラスに一致するインターフェイスのみを実装することができます。

于 2012-12-07T12:23:43.427 に答える