1

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

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
}

请阐明一些观点。

4

2 回答 2

1

最低要求IFoo

IFoo应该继承IWidgetIThingy。它还需要包括 和 的所有公共Foo成员WidgetBase

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继承它。

总校长:

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

于 2013-01-25T01:27:02.937 回答
0

我会根据您对新界面的用途建议。您希望 IFoo 具有哪些行为?换句话说,它在新项目中是做什么用的。为新项目提取足够的数据。不要将您的 IFoo 与从其他接口或 Foo 类的当前状态的继承混淆。

于 2013-01-25T02:21:01.410 回答