提取具有复杂类结构的接口

时间:2013-01-25 01:18:55

标签: c#

当我有多层类和接口时,我对使用接口提取的最佳方法感到困惑。假设我有以下层次结构:

Foo : WidgetBase, IWidget 
WidgetBase: BusinessObject, IThingy
IThingy : IGenericObject

现在我知道我必须将一个IFoo接口提取到一个单独的项目中;但是这个接口结构是否必须复制真实的结构 - 这意味着我还必须为BusinessObject和WidgetBase提取接口?或者这是否意味着我应该在创建提取的接口时展平结构,创建1个接口,IFoo,包含与Foo属性及其所有父类和接口相对应的属性,一直到层次结构?

我的界面中还有一些枚举类型属性 - 我怎样才能最好地解决这些问题呢?

public interface IWidget
{
    public WidgetType Type { get; set; }
}

public enum WidgetType
{
    Big, Small
}

请说清楚。

2 个答案:

答案 0 :(得分:1)

IFoo

的最低要求

IFoo应该继承IWidgetIThingy。 它还需要包含FooWidgetBase的所有公开成员。

public interface IFoo : IWidget, IThingy
{
    // public member of Foo and WidgetBase...
}

潜在的重构1:

为这样的WidgetBase定义接口可能会更好:

public interface IWidgetBase : IThingy
{
    // public members of WidgetBase...
}

然后IFoo可以继承:

public interface IFoo : IWidget, IWidgetBase
{
    // public member of Foo.
}

潜在的重构2:

同样适用于BusonessObject:为其定义接口,并IWidgetBase继承该接口。

一般校长:

您的接口应该指定对象的行为,并且应该在行为自然扩展的地方使用继承。

答案 1 :(得分:0)

我会建议您根据新界面的用途。您希望IFoo拥有哪些行为?换句话说,它在新项目中的用途是什么。为新项目提取足够的内容。不要使用来自其他接口的继承或来自当前Foo类的状态来搞乱你的IFoo。