2012-02-15 3 views
0

私のWPFビューでは、表示用に単一のインターフェイスを実装するいくつかのオブジェクトがあります。 1つを選択すると、ビューで選択したタイプとオプションに基づいて特定のメソッドを呼び出す必要があります。私は既に各タイプのオブジェクトに対して使用可能なオーバーロードを持っています。私はジェネリックメソッドを使用しようとしましたが、オブジェクトがあまりにも使いやすくなることが証明されました。いくつかの異なるタイプのオブジェクトに基づいてオーバーロードされたメソッドを呼び出す理想的な方法は何ですか?

メンテナンス性を目的とした大きな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); 
    } 

の別の方法を持っていますエクスポートするタイプ。

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

+1

あなたは小さなインターフェイスの例とどのようにあなたがあなたのクラスからそれを呼び出したいを投稿することができますか? –

答えて

1
たぶん

ない最もエレガントなソリューションが、

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

などを試してみてください...

+0

それは私が避けようとしていることですが、ありがとうございます。 – tylerjgarland

+0

多分、私はあなたが達成しようとしているものが間違っていると思っています。@ Trevor Pilleyが示唆したように、コードの例を投稿できますか? – sotn0r

+0

私はそうすることができます。 – tylerjgarland

関連する問題