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 语句。对于这种情况,我通常使用映射到 Action 的字典,但我还有另一种方法

    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 回答