0

私の WPF ビューには、表示目的で単一のインターフェイスを実装するオブジェクトがいくつかあります。いずれかが選択されたら、ビューで選択されたタイプとオプションに基づいて特定のメソッドを呼び出したいと思います。オブジェクトの種類ごとに使用できるオーバーロードが既にあります。一般的な方法を使用しようとしましたが、オブジェクトが違いすぎて使用できないことがわかりました。

保守性を目的として、大きな if ステートメントとの制御結合を回避しようとしています。

単一のインターフェースを使用して間違っていましたか、それともこれを行うための興味深い保守可能な方法はありますか?

IDisplayableObject のコレクションを含むデータグリッドがあります。

public interface IDisplayableObject
{
    string Name { get; set; }
    string ID { get; set; }
}

今、私は最初の答えとしてキャストしました。

 public void ExportDashed(string path, IDisplayableObject folder)
    {
        if (folder is TestFolder)
        {
            IndentationTraverse(folder as TestFolder);
        }
        else if (folder is UserStory)
        {
            IndentationTraverse(folder as UserStory);
        }
        _excelManipulator.Save(path);
    }

if文は避けたい。この場合、通常はアクションにマップされた辞書を使用しますが、別の方法もあります

    public void ExportShiftingColumns(string path, IDisplayableObject folder)
    {
        if (folder is TestFolder)
        {
            ColumnShiftTraverse(folder as TestFolder);
        }
        else if (folder is UserStory)
        {
            ColumnShiftTraverse(folder as UserStory);
        }
        _excelManipulator.Save(path);
    }

そのため、アクションを作成する必要があり、ダッシュをエクスポートまたはシフト列をエクスポートしてから、エクスポートするタイプを決定する必要があります。

コードからわかるように、重複は良いことではなく、できるだけ避けたいと考えています。このアプリケーションの場合、それはそれほど大したことではありませんが、個人的な学習のためです.

4

1 に答える 1

1

おそらく最もエレガントなソリューションではないかもしれませんが、試してみてください

if ( myObject as IInterface1 != null )
    ((IInterface1)myObject).Method1();
else if ( myObject as IInterface2 != null )
    ((IInterface2)myObject).Method2();

等々...

于 2012-02-16T00:25:14.173 に答える